在解释之前
if __name__ == '__main__'
重要的是要了解
__name__
是什么,它做什么。
是什么
__姓名__
?
__姓名__
是一个
DunderAlias
-可以将其视为全局变量(可从模块访问),其工作方式与
global
.
它是一个字符串(如上所述为全局字符串),由
type(__name__)
(屈服
<class 'str'>
),是两者的内置标准
Python 3
和
Python 2
版本。
哪里:
它不仅可以在脚本中使用,还可以在解释器和模块/包中找到。
翻译:
>>> print(__name__)
__main__
>>>
脚本:
测试文件.py
:
print(__name__)
导致
__main__
模块或包:
somefile.py文件:
def somefunction():
print(__name__)
测试文件.py:
import somefile
somefile.somefunction()
导致
somefile
注意,当在包或模块中使用时,
__姓名__
获取文件名。未给出实际模块或包路径的路径,但有自己的DunderAlias
__file__
,这样就可以了。
你应该看看,在哪
__姓名__
,其中主文件(或程序)将
总是
返回
__主要__
,如果它是一个模块/包,或者任何正在运行其他Python脚本的东西,那么它将返回源文件的名称。
练习:
作为一个变量意味着它的值
可以
被覆盖(“can”不代表“should”),覆盖
__姓名__
将导致可读性不足所以,无论如何,不要这样做。如果需要变量,请定义新变量。
通常假设
__姓名__
成为
__主要__
或文件名再次更改此默认值将导致更多的混淆,即它将起到良好的作用,从而进一步引发问题。
例子:
>>> __name__ = 'Horrify' # Change default from __main__
>>> if __name__ == 'Horrify': print(__name__)
...
>>> else: print('Not Horrify')
...
Horrify
>>>
一般来说,包括
如果u name_uuuu='\uu main_uuu'
在剧本里。
现在回答
如果u name_uuuu='\uu main_uuu'
:
现在我们知道
__姓名__
事情变得更清楚了:
一个
if
是一个流控制语句,包含给定值为真时将执行的代码块。我们已经看到了
__姓名__
两种都可以
__主要__
或者从中导入的文件名。
这意味着如果
__姓名__
等于
__主要__
然后该文件必须是主文件,并且必须实际运行(或者它是解释器),而不是导入到脚本中的模块或包。
如果真的
__姓名__
是否取
__主要__
然后代码块中的任何内容都将执行。
这告诉我们,如果运行的文件是主文件(或者直接从解释器运行),则必须执行该条件如果它是一个包,那么它不应该,并且值将不是
__主要__
.
模块:
__姓名__
也可以在模块中用于定义模块的名称
变体:
也可以做其他不太常见但有用的事情
__姓名__
,一些我将在这里展示:
仅当文件是模块或包时执行:
if __name__ != '__main__':
# Do some useful things
如果文件是主文件,则运行一个条件;如果不是主文件,则运行另一个条件:
if __name__ == '__main__':
# Execute something
else:
# Do some useful things
您还可以使用它在包和模块上提供可运行的帮助函数/实用程序,而无需精心使用库。
它还允许模块作为主脚本从命令行运行,这也非常有用。