本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
What does do?
在python脚本中,我偶尔会注意到如下情况:
1
2if __name__ =="__main__":
# do stuff like call main()
这有什么意义?
在您阅读了Python文档中的相关内容之后,您可以问什么特定的问题?例如,请参见docs.python.org/library/python.html。在阅读完本节之后,您有哪些具体问题。
洛特:他的问题似乎很具体。他在问这种情况通常是为了什么…
副本:stackoverflow.com/questions/419163/what-do-if-namemain-do
昨晚我自己也在想这个问题。
@弗拉格斯沃斯:我看不出这是怎么"具体"的。"问题是开放的……"有什么意义?它们不能解决编程问题。另外,"要点"的答案在文档中。如果有一个更集中的问题,而不是文档的一部分,那就太好了。
这个问题的答案可以通过谷歌快速找到(可能比花时间输入问题更快)。我不明白为什么这个问题被否决了5次(到目前为止)。像这样的问题会产生很多噪音,只会复制现有信息,很容易找到。
好吧,好吧,我有罪(投票结束)。
让所有大量的python代码活在一个函数中(即不在模块顶层)是一个关键的性能优化,也是良好代码组织的一个重要因素(python编译器可以优化对函数中局部变量的访问,而不是优化实际上是模块全局变量的"局部"变量)。因为后者的语义要求更高)。
对函数的调用以当前作为"主脚本"运行的模块为条件(而不是从另一个模块导入),这可能会导致模块中包含的功能块的潜在可重用性(因为其他模块可能会导入它并只调用适当的函数或类),更重要的是,它支持可靠的单元测试(在模块功能执行和测试之前,通常需要设置外部子系统的所有实物模型和假模型)。
我再也不会把我所有的代码放在模块的顶层。谢谢您。
这对我来说是一个比拥有数千张选票更好的解释。我连这些例子都看不出这一点。谢谢!
这允许单独导入或运行python脚本是一种明智的方法。
如果直接运行python文件,那么__name__变量将包含__main__。如果导入的脚本不是这种情况。通常,如果导入要从文件调用函数或引用类的脚本。
如果没有进行此检查,则导入时将运行不在类或函数中的任何代码。
假设它在main.py中,这样其他文件可以import main包含"主"程序中的类和函数,但不运行源代码。
如果没有此条件,则当由其他脚本导入时,将执行全局范围内的代码。
这是一个进行模块测试的好地方。这只在直接从shell运行模块时运行,但如果导入,则不会运行。