我偶尔会在Python脚本中看到以下类似的内容:
if __name__ == "__main__":
# do stuff like call main()
这有什么意义?
我偶尔会在Python脚本中看到以下类似的内容:
if __name__ == "__main__":
# do stuff like call main()
这有什么意义?
将所有重要的Python代码放在函数内部(即不要放在模块顶层)是重要的性能优化和代码组织的重要因素(Python编译器可以更好地优化函数中局部变量的访问,而不能像优化实际上是模块全局变量的"局部"变量那样进行优化,因为后者的语义更为严格)。
只有当当前模块作为“主脚本”运行时(而不是从其他模块导入时),才对该函数进行条件调用,这为包含在模块中的功能块的可重用性提供了潜在的可能性(因为其他模块可以导入它并仅调用相应的函数或类),更重要的是,它支持可靠的单元测试(在测试模块的功能之前,通常需要设置各种外部子系统的模拟和伪造)。
这允许一个Python脚本以合理的方式被导入或独立运行。
如果直接运行Python文件,则__name__
变量将包含__main__
。如果您导入脚本,那么情况就不是这样了。通常,如果您导入脚本,您想要从文件中调用函数或引用类。
如果没有此检查,导入时任何不在类或函数中的代码都将运行。
main.py
中,它的唯一目的是让其他文件可以通过import main
引入你的“主”程序中包含的类和函数,而不运行源代码。这是一个很好的放置模块测试的位置。只有在从shell直接运行模块时才会运行,但如果被导入,则不会运行。