“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