是的,整个脚本都被执行了。
我们有一个主要保护的原因是使您的程序既可以用作独立脚本(在这种情况下__name__
变量定义为"__main__"
),也可以作为另一个python脚本的模块导入。在这种情况下,我们不希望运行任何代码,我们只希望加载我们的任何人都可以使用代码的定义。
__main__
如果 python 文件自己运行,则守卫的一种典型用途是运行单元测试。例如让我们假设我们有文件mymodule.py
:
def my_function(foo):
"""This function will add 54 to foo.
The following two lines are 'doctests' and can be run
automatically to show that the module's function work as expected.
>>> my_function(6)
60
"""
return foo + 54
if __name__ == "__main__":
import doctest
doctest.testmod() # this will run all doctests in this file
如果我们现在在命令行上运行它,将运行测试以检查模块是否按预期工作。
现在,从另一个文件或命令行,我们可以导入mymodule.py
:
>>> import mymodule # Note that the tests will not be run when importing
>>> mymodule.my_function(3)
57
并且测试不会运行,因为在导入脚本时__name__
变量不会出现。__main__
您可以使用一个简单的文件 ( test.py
) 进行测试:
➤ cat test.py
#!/usr/bin/env python
print("my name is: ", __name__)
➤ python test.py
my name is: __main__
➤ python
Python 3.3.1 (default, Apr 6 2013, 19:11:39)
[GCC 4.8.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import test
my name is: test
>>>