我已经在Python中编写了很长一段时间的脚本,而且我在需要的时候学习了更多的Python。在阅读其他人的代码时,我经常会遇到if name == "__main__":
。
有什么好处?
答案 0 :(得分:23)
这允许您将同一文件用作库(通过导入它)或作为应用程序的起始点。
例如,请考虑以下文件:
# hello.py
def hello(to=__name__):
return "hello, %s" % to
if __name__ == "__main__":
print hello("world")
您可以通过两种方式使用该代码。首先,您可以编写一个导入它的程序。如果导入库,__name__
将是库的名称,因此检查将失败,代码将不会执行(这是所需的行为):
#program.py
from hello import hello # this won't cause anything to print
print hello("world")
如果您不想编写第二个文件,可以直接从命令行运行代码,例如:
$ python hello.py
hello, __main__
此行为全部取决于特殊变量__name__
,python将根据是由导出程序导入还是由解释程序直接运行来设置。如果直接运行,它将设置为__main__
。如果导入,则将其设置为库名称(在本例中为hello
)。
此构造通常用于向代码添加单元测试。这样,当您编写库时,您可以将测试代码直接嵌入到文件中,而不必担心在以正常方式使用库时它将被执行。当您想要测试库时,您不需要任何框架,因为您可以像运行程序一样运行库。
另见__main__
in the python documentation(虽然它非常稀疏)
答案 1 :(得分:3)
基本上,
“主”脚本文件与以其他方式导入或引用的外部文件之间存在区别。如果脚本是“主”脚本,则特殊变量__name__
将等于"__main__"
。
您可以使用它来保护脚本所具有的类和变量中的“执行”代码。这使您可以导入脚本并使用类和变量,而无需实际运行该脚本的主代码(如果有的话)。