Python中的执行流程
这个问题在这里已经有了答案:
Python解释器对main()
函数一无所知 - 流只是一行一行。
该块:
if __name__ =="__main__": main()
是一个明确的函数调用,如果魔术变量__name__
包含字符串"__main__"
。 那东西, __name__
的内容是Python运行时运行模块的一件特别的事情:如果当前模块是被调用的主程序,它包含字符串__main__
,否则它的内容就是模块名称。
因此,如果您希望将main
函数(可以具有任何名称)放在另一个文件中,则可以在调用时导入它:
if __name__ =="__main__":
from other_module import main
main()
此功能很有趣,因为它允许任何Python文件作为其他程序的可加载库模块工作,并提供独立功能作为程序。
但是,对于Python包,即包含相关.py
文件的文件夹,每个文件夹对应一个模块,Python必须选择顺序运行这些模块中的哪一个。 当您使用Python运行时的-m
指令执行程序包时,它会在程序包中查找名为__main__.py
的文件并执行该文件 - 如果没有这样的文件,程序包将无法直接运行。
然而,尽管如此, __main__.py
文件仅在执行包作为主程序时自动运行 - 如果包或部分包由另一个程序导入,则不会执行。 这与使用if
表达式检查__name__
的内容不同,实际上它是一种定义起始位置的内置行为。
当您使用python script.py
从命令行运行单个Python脚本时,解释将从第一行开始并逐行继续。 如果一行开始一个类或函数定义,则该定义将被存储以供日后参考。 如果该行是可执行代码,则直接执行。 在语句if __name__ == "__main__": main()
,这是直接可执行的,如果条件计算结果为true,则调用main()
。 但是,这并不特别。 你可以在if
体内使用任何你想要的代码。
上一篇: Flow of execution in Python
下一篇: Python main function