`if name == "__main__"` 在Python中是什么意思?
可能重复的问题:
<if name==“main”:> 是干什么的?
我已经写了很长时间的Python脚本了,随着需要我也在不断学习Python。当我阅读别人的代码时,经常会看到 if name == "__main__":
这个结构。
这个结构有什么用呢?
2 个回答
基本上,
这里有一个区别,就是“主”脚本文件和其他通过导入或其他方式引用的外部文件。如果这个脚本是“主”脚本,那么一个特殊的变量 __name__
的值就会是 "__main__"
。
你可以利用这个特性来保护脚本中的“执行”代码,避免它和类、变量混在一起。这样一来,你就可以导入这个脚本,使用里面的类和变量,而不需要实际运行这个脚本的主代码(如果有的话)。
另外,你可以查看这个链接了解更多: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
)。
通常,这种结构用来给你的代码添加单元测试。这样,当你写一个库的时候,可以把测试代码直接放在文件里,而不用担心在正常使用库的时候会被执行。当你想测试这个库时,不需要任何框架,因为你可以直接像运行程序一样运行这个库。
更多信息可以查看 __main__
在 Python 文档中的介绍(不过内容比较少)。