在解释之前if __name__ == '__main__'
了解什么是__name__
和它的作用。
什么是__name__
?
__name__
是 a 是达德阿里亚斯Name- 可被视为全球变量(可从模块中获取),工作方式与global
.
它是一个字符串(如上所述,全球范围),如下文所示:type(__name__)
(年均(年均)<class 'str'>
),而两者都是一个内在的标准,Python 3和Python 2版本的版本 。
何处处
它不仅可以用于脚本,还可以在口译和模块/软件包中找到。
解释器 :
>>> print(__name__)
__main__
>>>
脚本 :
测试_ 文件. py:
print(__name__)
导致__main__
模块或包件 :
一些文件. py:
def somefunction():
print(__name__)
测试_ 文件. py :
import somefile
somefile.somefunction()
导致somefile
请注意,如果在包件或模块中使用,__name__
选择文件的名称。没有给实际模块或软件包路径的路径,而是有它自己的 DunderAlias 路径。__file__
,允许这样做。
你应该看到,在哪里__name__
,它是主文件(或程序)的始终始终返回返回__main__
,如果它是模块/软件包,或者正在从其他 Python 脚本中运行的东西,将返回其来源文件的名称。
实践实践实践
变数意味着它的价值能够被覆盖 (“ can” 并不意味着“sh') , 覆盖__name__
将会导致缺乏可读性。 所以无论出于什么原因都不要这样做。 如果您需要变量定义新的变量, 请定义新的变量 。
人们总是认为,人们总是认为,__name__
待 待 待 待 待 待 待 待__main__
或文件的名称。 再次更改此默认值将会造成更多的混乱, 从而导致问题更加严重 。
示例:
>>> __name__ = 'Horrify' # Change default from __main__
>>> if __name__ == 'Horrify': print(__name__)
...
>>> else: print('Not Horrify')
...
Horrify
>>>
一般认为良好做法包括:if __name__ == '__main__'
在脚本中。
现在回答if __name__ == '__main__'
:
现在我们知道__name__
(b) 使情况更加明确:
A 音 Aif
是一个流量控制语句,其中含有如果给定值是真实的将执行的代码块块。我们已经看到__name__
中可选择其中之一__main__
或从它导入的文件名 。
这意味着如果__name__
等于__main__
然后,文件必须是主文件,而且必须实际运行(或翻译),而不是将模块或软件包导入到脚本中。
如果确实__name__
值的数值__main__
然后那块代码里的任何东西 都会被执行
这告诉我们, 如果正在运行的文件是主文件( 或者您正在直接从翻译器中运行) , 那么该条件必须执行。 如果它是软件包, 那么它不应该, 而值将不会是__main__
.
模块模块
__name__
也可以用于模块中定义模块名称的模块
变式
此外,还可能采取其他不太常见但有用的措施,包括:__name__
有些我会在这里展示:
仅在文件是一个模块或软件包时才执行
if __name__ != '__main__':
# Do some useful things
如果文件是主文件,则运行一个条件;如果不是主文件,则运行另一个条件
if __name__ == '__main__':
# Execute something
else:
# Do some useful things
您也可以使用它在软件包和模块上提供可运行的帮助功能/用途,而不必精密使用图书馆。
它还允许模块作为主脚本从命令行运行,这也非常有用。