这样做做什么,为什么应该包括:if
语句?
if __name__ == "__main__":
print("Hello, World!")
如果你试图结束一个问题 如果你想要结束一个问题 在那里有人应该应该 使用这个学说,而不是,是不是, 考虑关闭作为 重复的为什么Python在我进口时 运行我的模块? 我该如何阻止它?。而对于某些问题,如果有人只是没有调用任何函数,或者错误地期望指定函数main
自动用作切入点,使用当我启动 Python 脚本时, 主函数为何不运行? 脚本从哪里开始运行 ?.
用于从命令行调用 Python 文件。 它通常用于调用“ main ()) ” 函数或执行其他合适的启动代码, 比如, 处理命令行参数 。
也可以以几种方式写成。
def some_function_for_instance_main():
dosomething()
__name__ == '__main__' and some_function_for_instance_main()
我不是说你应该用这个来做生产代码, 但是它可以说明,没有什么"神奇"if __name__ == '__main__'
.
这只是援引 Python 文件中主要功能的常规 。
考虑:
if __name__ == "__main__":
main()
它检查是否__name__
Python 脚本属性是"__main__"
。换句话说,如果程序本身被执行,则属性将是__main__
,因此程序将被执行(在这种情况下,main()
职能)
然而,如果您的 Python 脚本被模块使用,if
将执行语句,所以if __name__ == "__main__"
仅用于检查程序是否用作模块,因此决定是否运行代码。
当您在本地交互运行 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 中每个模块的属性都称为属性__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
将不执行。