在Python中`if name =="__ main __"是什么意思?

Ado*_*obe 10 python scope module

可能重复:
<if name ==" main ":>做什么?

我已经在Python中编写了很长一段时间的脚本,并且在我需要的时候学习了更多的Python.在阅读其他人的代码时,我if name == "__main__":经常会遇到.

到底有什么好处呢?

Bry*_*ley 23

这允许您将同一文件用作库(通过导入它)或作为应用程序的起始点.

例如,请考虑以下文件:

# hello.py
def hello(to=__name__):
    return "hello, %s" % to

if __name__ == "__main__":
    print hello("world")
Run Code Online (Sandbox Code Playgroud)

您可以通过两种方式使用该代码.首先,您可以编写一个导入它的程序.如果导入库,__name__则将是库的名称,因此检查将失败,并且代码将不会执行(这是所需的行为):

#program.py
from hello import hello # this won't cause anything to print
print hello("world")
Run Code Online (Sandbox Code Playgroud)

如果您不想编写第二个文件,可以直接从命令行运行代码,例如:

$ python hello.py
hello, __main__
Run Code Online (Sandbox Code Playgroud)

这种行为都取决于__name__python根据是否导入库或由解释器直接运行而设置的特殊变量.如果直接运行,它将被设置为__main__.如果导入它将被设置为库名称(在本例中hello).

通常,此构造用于向代码添加单元测试.这样,当您编写库时,您可以将测试代码直接嵌入到文件中,而不必担心在以正常方式使用库时它将被执行.当您想要测试库时,您不需要任何框架,因为您可以像运行程序一样运行库.

另见__main__python文档(尽管它非常稀疏)