我刚开始学习Python,而困扰我的是"__main__"
的确切类型。到目前为止,我已经看到"__main__"
像__name__ == "__main__"
一样被用作字符串文字。
我的意思是,它不是函数,也不是变量。与所有其他以__开头的内置变量和函数一样,这很令人困惑。以__开头的任何特殊原因?我知道它在模块和名称空间的上下文中具有特殊含义,但是我纯粹是在谈论基本/原始数据类型。
答案 0 :(得分:4)
是的,它只是一个字符串。它带有两个下划线的事实是因为它是一个“特殊名称”。 Python中的特殊名称具有前导和尾随两个下划线。
docs中也解释了它的实际含义:
29.4。
__main__
—顶级脚本环境
'__main__'
是执行顶级代码的作用域的名称。从标准输入,脚本或交互式提示中读取时,模块的__name__
设置为'__main__'
。模块可以通过检查其自己的
__name__
来发现其是否在主作用域中运行,这允许使用通用习语在模块中以脚本或{{ 1}},但在导入时则不会:python -m
对于一个包,可以通过包含一个
if __name__ == "__main__": # execute only if run as a script main()
模块来实现相同的效果,该模块的内容将在使用__main__.py
运行该模块时执行。
答案 1 :(得分:3)
是的,"__main__"
是字符串文字,因为模块名称是字符串。该模块称为__main__
,以将其与名为main
的模块区分开,并且它是系统分配的名称。
答案 2 :(得分:2)
是的,它是字符串文字。像__init__
之类的魔术方法以2个下划线开头和结尾以不与其他方法混用一样,__main__
的命名也就是不与现有文件名混用。
答案 3 :(得分:1)
是的,它只是一个字符串文字,在设计上看起来有点像Python中某些特殊方法的名称。
答案 4 :(得分:1)
您是正确的__main__
是字符串文字。 __name__
只是一个变量(通常称为dunder别名)。
以下是证明这一点的两种简单方法:
使用type()
:
>>> type(__name__)
<class 'str'>
>>>
这应该足够了,但是例如您也可以覆盖__name__
的值(但是您不应该这样做):
>>> __name__ = 'hello'
>>> __name__
'hello'
>>>
__name__
是DunderAlias-可以被视为全局变量(可从模块访问),并以类似于global的方式工作。 它是type(__name__)
(yielding <class 'str'>
)指示的字符串(如上所述),并且是Python 3和Python 2版本的内置标准。