我是Python的新手,因此对Python中程序的流程感到有点困惑。
如果我的理解是正确的,对于单个.py
文件,如果我们添加行
if __name__ =="__main__": main()
解释器找到main函数并从那里开始执行。 这是因为Python执行顺序排列。
我的问题是,如果有多个.py
文件,并且有一个这样的文件具有main函数,就像Java / C ++那样python解释器有没有办法知道广告开始执行主函数?
答案 0 :(得分:5)
Python解释器知道main()
函数的 nothing - 流程只是一行一行。
进入的街区:
if __name__ =="__main__": main()
如果魔术变量__name__
包含字符串"__main__"
,则是对函数的显式调用。那个,__name__
的内容是Python运行时运行模块时的一个特殊事情:如果当前模块是被调用的主程序,它包含字符串__main__
,否则其内容是模块名称。
因此,如果您希望将main
函数(可以包含任何名称)放在另一个文件中,您只需在调用时导入它:
if __name__ =="__main__":
from other_module import main
main()
此功能很有趣,因为它允许任何Python文件既可以作为其他程序的可加载库模块,也可以作为程序提供独立功能。
但是,对于Python包,即包含相关.py
文件的文件夹,每个文件对应一个模块,Python必须选择顺序运行这些模块中的哪一个。当您使用-m
指令向Python运行时执行包时,它会在包中找到一个名为__main__.py
的文件并执行该文件 - 如果没有这样的文件,则无法直接运行包。
尽管如此,__main__.py
文件仅在将程序包作为主程序执行时自动运行 - 如果程序包或其中的一部分由其他程序导入,则不会执行。
与使用__name__
表达式检查if
的内容不同,这实际上是一个定义起始位置的内置行为。
答案 1 :(得分:2)
当您使用python script.py
从命令行运行单个Python脚本时,解释从第一行开始并逐行继续。如果一行开始一个类或函数定义,则存储该定义以供以后引用。如果该行是可执行代码,则直接执行。对于语句if __name__ == "__main__": main()
,这是可直接执行的,如果条件的计算结果为true,则调用main()
。但是,这并不特别。您可以在if
正文中获得所需的任何代码。