在python中,一个主函数和/或 __name__ == “__main__” 有什么意义?

What's the point of a main function and/or __name__ == “__main__” check in Python?

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

Possible Duplicate:
What does do?

在python脚本中,我偶尔会注意到如下情况:

1
2
if __name__ =="__main__":
    # do stuff like call main()

这有什么意义?


让所有大量的python代码活在一个函数中(即不在模块顶层)是一个关键的性能优化,也是良好代码组织的一个重要因素(python编译器可以优化对函数中局部变量的访问,而不是优化实际上是模块全局变量的"局部"变量)。因为后者的语义要求更高)。

对函数的调用以当前作为"主脚本"运行的模块为条件(而不是从另一个模块导入),这可能会导致模块中包含的功能块的潜在可重用性(因为其他模块可能会导入它并只调用适当的函数或类),更重要的是,它支持可靠的单元测试(在模块功能执行和测试之前,通常需要设置外部子系统的所有实物模型和假模型)。


这允许单独导入或运行python脚本是一种明智的方法。

如果直接运行python文件,那么__name__变量将包含__main__。如果导入的脚本不是这种情况。通常,如果导入要从文件调用函数或引用类的脚本。

如果没有进行此检查,则导入时将运行不在类或函数中的任何代码。


假设它在main.py中,这样其他文件可以import main包含"主"程序中的类和函数,但不运行源代码。

如果没有此条件,则当由其他脚本导入时,将执行全局范围内的代码。


这是一个进行模块测试的好地方。这只在直接从shell运行模块时运行,但如果导入,则不会运行。