我是Python的新手,因此对Python中程序的流程感到有点困惑.如果我的理解是正确的,对于单个.py文件,如果我们添加该行
if __name__ =="__main__": main()
Run Code Online (Sandbox Code Playgroud)
解释器找到主函数并从那里开始执行.这,因为Python执行顺序排列.
我的问题是,如果有多个.py文件和1个这样的文件有主要功能,像Java/C++那样python解释器有没有办法知道广告开始执行主要功能?
Python解释器对函数一无所知main() - 流程只是一行一行.
块走了:
if __name__ =="__main__": main()
Run Code Online (Sandbox Code Playgroud)
如果magic变量__name__包含字符串,则是对函数的显式调用"__main__".那个东西,__name__是运行模块时Python运行时所做的一件特别的事情:如果当前模块是被调用的主程序,它包含字符串__main__,否则它的内容就是模块名.
因此,如果您希望将您的main函数(可以包含任何名称)放在另一个文件中,您只需在调用时导入它:
if __name__ =="__main__":
from other_module import main
main()
Run Code Online (Sandbox Code Playgroud)
此功能很有趣,因为它允许任何Python文件既可以作为其他程序的可加载库模块,也可以作为程序提供独立功能.
但是,对于Python包,即包含相关.py文件的文件夹,每个文件对应一个模块,Python必须选择顺序运行这些模块中的哪一个.当您使用-m指令执行Python运行时的程序包时,它会查找__main__.py在程序包内部命名的文件并执行该程序 - 如果没有这样的文件,则无法直接运行程序包.
尽管如此,__main__.py文件只在作为主程序执行包时自动运行 - 如果包或其中的一部分由另一个程序导入,则不执行.与检查表达式的内容不同__name__,if它实际上是一个定义起始位置的内置行为.