是“ __main__”只是字符串文字吗?

时间:2018-06-23 16:39:52

标签: python

我刚开始学习Python,而困扰我的是"__main__"的确切类型。到目前为止,我已经看到"__main__"__name__ == "__main__"一样被用作字符串文字。
我的意思是,它不是函数,也不是变量。与所有其他以__开头的内置变量和函数一样,这很令人困惑。以__开头的任何特殊原因?我知道它在模块和名称空间的上下文中具有特殊含义,但是我纯粹是在谈论基本/原始数据类型。

5 个答案:

答案 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中某些特殊方法的名称。

文档中有更多信息:https://docs.python.org/3/library/main.html

答案 4 :(得分:1)

您是正确的__main__是字符串文字。 __name__只是一个变量(通常称为dunder别名)。

以下是证明这一点的两种简单方法:

使用type()

>>> type(__name__)
<class 'str'>
>>>

这应该足够了,但是例如您也可以覆盖__name__的值(但是您不应该这样做):

>>> __name__ = 'hello'
>>> __name__
'hello'
>>>

我的回答here expains what it is

  

__name__是DunderAlias-可以被视为全局变量(可从模块访问),并以类似于global的方式工作。   它是type(__name__)yielding <class 'str'>)指示的字符串(如上所述),并且是Python 3和Python 2版本的内置标准。