Python

时间:2016-01-29 16:48:19

标签: python

我是Python的新手,因此对Python中程序的流程感到有点困惑。 如果我的理解是正确的,对于单个.py文件,如果我们添加行

if __name__ =="__main__": main()

解释器找到main函数并从那里开始执行。 这是因为Python执行顺序排列。

我的问题是,如果有多个.py文件,并且有一个这样的文件具有main函数,就像Java / C ++那样python解释器有没有办法知道广告开始执行主函数?

2 个答案:

答案 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正文中获得所需的任何代码。