“if name ==”是什么

可能重复:
<if name ==“ main ”:>是做什么的?

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

到底有什么好处呢?


这使您可以将相同的文件作为库(通过导入它)或作为应用程序的起点使用。

例如,请考虑以下文件:

# 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 )。

通常这个构造被用来为你的代码添加单元测试。 这样,当你编写一个库时,你可以直接在文件中嵌入测试代码,而不必担心在以普通方式使用库时它会被执行。 当你想测试库时,你不需要任何框架,因为你可以像运行程序一样运行库。

请参阅python文档中的__main__ (虽然它非常稀疏)


基本上,

“主”脚本文件与以其他方式导入或引用的外部文件之间存在区别。 如果脚本是“主”脚本,那么特殊变量__name__将等于"__main__"

您可以使用它来保护脚本所具有的类和变量的“执行”代码。 这使您可以导入脚本并使用类和变量,而无需实际运行该脚本的主代码(如果有)。

链接地址: http://www.djcxy.com/p/9311.html

上一篇: What does `if name == "

下一篇: Understanding the main method of python