这样做做什么,为什么应该包括:if
语句?
if __name__ == "__main__":
print("Hello, World!")
如果你试图结束一个问题 如果你想要结束一个问题 在那里有人应该应该 使用这个学说,而不是,是不是, 考虑关闭作为 重复的为什么Python在我进口时 运行我的模块? 我该如何阻止它?。而对于某些问题,如果有人只是没有调用任何函数,或者错误地期望指定函数main
自动用作切入点,使用当我启动 Python 脚本时, 主函数为何不运行? 脚本从哪里开始运行 ?.
当您在本地交互运行 Python 时__name__
变量的变量被指定值__main__
同样,当您从命令行执行 Python 模块时,而不是将它导入到另一个模块中时,它__name__
属性的属性被指定值__main__
,而不是模块的实际名称。这样,模块可以查看自己的__name__
用于确定它们是如何使用的值, 无论是作为对其它程序的支持还是作为从命令行执行的主要应用程序。 因此, 在 Python 模块中, 下列语系非常常见 :
if __name__ == '__main__':
# Do something appropriate here, like calling a
# main() function defined elsewhere in this module.
main()
else:
# Do nothing. This module has been imported by another
# module that wants to make use of the functions,
# classes and other useful bits it has defined.
所有答案都大致解释了它的功能。但我将举一个例子来说明它的用法,这可能有助于进一步澄清这个概念。
假设你有两个Python文件,A.py和B.py。a.py
进口进口进口b.py
。我们运行a.py
文件, 在哪里import b.py
代码先执行。在其余a.py
代码运行,文件中的代码b.py
必须完全运行。
在b.py 代码中,有一些代码是那个文件的独有代码b.py
我们不想要任何其他文件(不包括b.py
已导入 b. py 文件来运行 。
这就是这行代码检查。如果它是主文件(即,b.py
运行代码,在这种情况下它不是代码 (a.py
是正在运行的主文件),然后只有代码才能被执行。
我们看看__name__ == '__main__':
经常
它检查一个模块是否正在导入 。
换言之,在if
只有在代码直接运行时才执行此块。这里directly
中指not imported
.
让我们看看它用一个简单的代码 来打印模块的名称做什么:
# test.py
def test():
print('test module name=%s' %(__name__))
if __name__ == '__main__':
print('call test()')
test()
如果我们直接通过python test.py
,模块名称是__main__
:
call test()
test module name=__main__