这样做做什么,为什么应该包括:if
语句?
if __name__ == "__main__":
print("Hello, World!")
如果你试图结束一个问题 如果你想要结束一个问题 在那里有人应该应该 使用这个学说,而不是,是不是, 考虑关闭作为 重复的为什么Python在我进口时 运行我的模块? 我该如何阻止它?。而对于某些问题,如果有人只是没有调用任何函数,或者错误地期望指定函数main
自动用作切入点,使用当我启动 Python 脚本时, 主函数为何不运行? 脚本从哪里开始运行 ?.
原因 原因 原因
if __name__ == "__main__":
main()
主要是为了避免导入锁定可能产生的问题引起的问题直接导入代码. 你想要main()
如果您的文件被直接引用( 即__name__ == "__main__"
如果您的代码是导入的, 则进口者必须从真正的主模块输入您的代码, 以避免进口锁出现问题 。
一个副作用是,您自动签署一个支持多个切入点的方法。您可以使用main()
作为切入点,但你没有 不得不时段setup.py
预计预计预计预计main()
,其他工具使用其他切入点。例如,将文件作为gunicorn
进程,您定义app()
函数代替main()
。 和setup.py
, gunicorn
输入密码时不要做任何事情(因为进口锁问题)。
我认为最好打破答案的深度 和简单的话:
__name__
: Python 中的每个模块都有一个特殊属性__name__
。它是返回模块名称的内置变量。
__main__
:与其他编程语言一样,Python也有执行的切入点,即主切入点。'__main__'
是顶层代码执行范围的名称。基本上,您有两种方法使用 Python 模块:直接作为脚本运行,或导入。当一个模块作为脚本运行时,它的脚本__name__
设置为__main__
.
因此,《公约》和《京都议定书》的__name__
属性设置为__main__
当模块作为主程序运行时,该模块作为主程序运行。否则__name__
设置以包含模块的名称。
Python 中每个模块的属性都称为属性__name__
的值。__name__
属性是__main__
当模块直接运行时, 例如python my_module.py
否则(就像你说的那样)import my_module
)值的数值__name__
是模块的名称。
简而言之,仅举一个小例子来解释。
脚本测试.py
apple = 42
def hello_world():
print("I am inside hello_world")
if __name__ == "__main__":
print("Value of __name__ is: ", __name__)
print("Going to call hello_world")
hello_world()
我们可以直接执行
python test.py
Output
Value of __name__ is: __main__
Going to call hello_world
I am inside hello_world
现在假设我们从另一个剧本中 将上述剧本称为:
脚本外部调用(_P).py
import test
print(test.apple)
test.hello_world()
print(test.__name__)
当你执行此操作时,
python external_calling.py
Output
42
I am inside hello_world
test
因此,以上不言自明地说明,当你们呼唤测试测试从另一个脚本, 如果循环__name__
内test.py
将不执行。