这样做做什么,为什么应该包括:if
语句?
if __name__ == "__main__":
print("Hello, World!")
如果你试图结束一个问题 如果你想要结束一个问题 在那里有人应该应该 使用这个学说,而不是,是不是, 考虑关闭作为 重复的为什么Python在我进口时 运行我的模块? 我该如何阻止它?。而对于某些问题,如果有人只是没有调用任何函数,或者错误地期望指定函数main
自动用作切入点,使用当我启动 Python 脚本时, 主函数为何不运行? 脚本从哪里开始运行 ?.
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
将不执行。
什么是什么东西if __name__ == "__main__":
是吗?
__name__
是一个全球变量(在 Python 中,在模块模块级别)存在于所有命名空间的所有命名空间中。它通常是模块的名称(作为str
类型))
然而,作为唯一的特殊情况,无论你运行的 Python 程序,就像我的代码。 py:
python mycode.py
以其他匿名的全域命名空间被指定为'__main__'
至其__name__
.
因此,包括最后一行
if __name__ == '__main__':
main()
- 在我的代码.py脚本的结尾,
- 当它是由 Python 进程运行的初级切入点模块时,
将会导致您的脚本有独特的定义main
要运行的函数。
使用此构造的另一个好处是:您也可以将代码作为模块导入到另一个脚本中,然后运行主函数,如果且当您的程序决定:
import mycode
# ... any amount of other code
mycode.main()
创建以下两个文件 :
# a.py
import b
# b.py
print("__name__ equals " + __name__)
if __name__ == '__main__':
print("if-statement was executed")
现在每个文件都单独运行 。
运行中python a.py
:
$ python a.py
__name__ equals b
何时a.py
执行时,它导入模块b
。这导致所有代码都在里面b
要运行。 Python 设置globals()['__name__']
和在b
模块的模块到模块名称,b
.
运行中python b.py
:
$ python b.py
__name__ equals __main__
if-statement was executed
仅在文件b.py
已执行, Python 设置globals()['__name__']
在此文件中的文件中"__main__"
因此,if
用于True
这一次。