python中的执行流

Flow of execution in Python

本问题已经有最佳答案,请猛点这里访问。

我对Python完全陌生,因此对Python中的程序流有点困惑。如果我的理解正确,对于单个.py文件,如果我们添加行

1
if __name__ =="__main__": main()

解释器找到主函数并从那里开始执行。这是因为python的执行顺序是一行接一行的。

我的问题是,如果有多个EDOCX1×0个文件,1个这样的文件有主要的功能,比如爪哇/C++,Python解释器可以知道AD开始执行main函数吗?


python解释器对main()函数一无所知-流程只是一行一行地进行。

去的街区:

1
if __name__ =="__main__": main()

如果幻数变量__name__包含字符串"__main__",则显式调用函数。这一点,__name__的内容是Python运行时在运行模块时所做的一件特殊的事情:如果当前模块是被调用的主程序,它包含字符串__main__,否则它的内容是模块名。

因此,如果您希望将您的main函数(可以有任何名称)放在另一个文件中,您可以在调用时导入它:

1
2
3
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主体中拥有您想要的任何代码。