我偶尔会在Python脚本中注意到以下内容:
if __name__ == "__main__":
# do stuff like call main()
这有什么意义?
答案 0 :(得分:21)
将所有实质的Python代码放在函数内部(即,不在模块顶层)是关键性能优化以及良好组织代码的重要因素(Python编译器可以优化在一个函数中访问局部变量比它可以优化实际上是模块全局变量的“局部”变量要好得多,因为后者的语义要求更高。)
以当前模块作为“主脚本”(而不是从另一个模块导入)调用函数调用使得模块中包含的功能块的潜在可重用性(因为其他模块可以导入它和只需调用适当的函数或类),更重要的是它支持可靠的单元测试(在执行和测试模块的功能之前,通常需要设置外部子系统的所有类型的模型和伪造)。
答案 1 :(得分:8)
这允许导入python脚本或独立运行是一种理智的方式。
如果直接运行python文件,__name__
变量将包含__main__
。如果导入的脚本不是这种情况。通常,如果您导入要从文件中调用函数或引用类的脚本。
如果您没有进行此检查,则导入时将运行任何不在类或函数中的代码。
答案 2 :(得分:7)
这个的唯一目的,假设它在main.py
,其他文件可以import main
包含你的“主”程序中的类和函数,但不运行源代码。
如果没有这个条件,全局范围内的代码将在其他脚本导入时执行。
答案 3 :(得分:3)
这是放置模块测试的好地方。这仅在直接从shell运行模块时运行,但如果导入则不会运行。