当前位置 : 主页 > 编程语言 > python >

一文弄懂Python中的 if __name__ == __main__

来源:互联网 收集:自由互联 发布时间:2022-06-15
1. 引言 在Python相关代码中,我们经常会遇到如下代码段: # stuff if __name__ == "__main__" : # do stuff 本文将尽可能使用简单的样例来解释这里发生了什么,以及需要使用​​if __name__=="__main

1. 引言

在Python相关代码中,我们经常会遇到如下代码段:

# stuff
if __name__ == "__main__":
# do stuff

本文将尽可能使用简单的样例来解释这里发生了什么,以及需要使用​​if __name__=="__main__"​​的情形。请注意,上述代码中​​name​​和​​main​​前后有2个下划线字符。

闲话少说,我们直接开始吧!

2. 特殊变量

当我们正常运行我们的​​Python​​脚本时,该脚本中的变量​​__name__​​的值一般为​​__main__​​。我们来看个示例:

# first.py
print(__name__)

我们在终端中运行上述脚本,代码如下:

python first.py

输出如下:

__main__

观察上述输出,当我们运行脚本​​first.py​​的时候,变量​​__name__​​的值被设置为​​__main__​​。


3. 复杂的例子

上述示例相对简单,也相对容易理解。接着我们来举个具有多个文件的例子,这里假设我们有三个脚本,分别为​​a.py​​,​​b.py​​以及​​c.py​​。

其中,​​a.py​​的内容如下:

# a.py
print("__name__ in a.py:", __name__)
from b import *
from c import *

此时,​​b.py​​的内容如下:

# b.py
print("__name__ in b.py:", __name__)

​​c.py​​的内容如下:

# c.py
print("__name__ in c.py:", __name__)

如果我们运行命令​​python a.py​​得到结果如下:

__name__ in a.py: __main__
__name__ in b.py: b
__name__ in c.py: c

注意在脚本​​a.py​​中我们看到​​__name__​​的值为​​__main__​​,此时在脚本​​b.py​​中​​__name__​​的值为​​b​​, 同时 ​​c.py​​中​​__name__​​的值为​​c​​。这是因为我们运行的脚本为​​a.py​​,那么该脚本即​​a.py​​中变量​​__name__​​的值将会被设置为字符串​​__main__​​.

此外,脚本​​b.py​​和​​c.py​​中的变量·​​__name__​​分别保持为​​b​​和​​c​​,这是因为脚本​​b.py​​和​​c.py​​不是直接运行的脚本。而是我们运行的脚本​​a.py​​调用了​​b.py​​和​​c.py​​中的​​print​​函数。

如果我们单独运行​​python b.py​​得到结果如下:

__name__ in b.py: __main__

相应的我们运行​​python c.py​​,得到结果如下:

__name__ in c.py: __main__

观察上述两个输出,当我们直接运行脚本​​b.py​​或​​c.py​​,相应的脚本里的变量​​__name__​​都将被设置为​​__main__​​。


4. 使用场景

作为Python开发者,我们通常会在一个项目工程中创建多个​​Python​​文件而不是将所有代码都写在一个​​Python​​文件中。因此我们通常会有一个主的​​Python​​文件用来作为项目工程的入口,同时其他文件包含一些辅助性的函数实现。

我们来看个示例,这里假设我们有两个​​Python​​文件,如下:

# main.py
from helper import *
print(greet("bob"))

辅助函数实现 ​​helper.py​​内容如下:

# helper.py
def greet(name):
return "hello " + name
print(greet("testname"))

如果此时我们运行命令 ​​python main.py​​,得到结果如下:

hello bob
hello testname

主要上述的​​import​​语句将从​​helper.py​​中引入所有的语句,所以​​helper.py​​中的测试语句​​print(greet("testname"))​​也将被执行。虽然我们可以通过添加注释或者屏蔽注释来达到运行​​main.py​​或​​helper.py​​来控制该测试语句的输出,但是这种情形就是语句

​​if __name__=="__main__"​​ 大显身手的情形。

5. 解决方案

我们针对上述情形,进行代码整改,如下:

# main.py
from helper import *
print(greet("bob"))

我们修改文件 ​​helper.py​​内容如下:

def greet(name):
return "hello " + name
if __name__ == "__main__":
print(greet("testname"))

此时,我们执行命令​​python main.py​​,得到结果如下:

hello bob

注意,此时`helper.py
​​中的变量 ​​__name__​​的值为​​helper​​, 所以​​helper.py​​中的​​if​​语句不成立,进而将不会执行我们的测试语句​​print(greet("testname"))`.

此时,如果我们单独运行命令​​python helper.py​​ ,得到结果如下:

hello testname

单独运行​​helper.py​​时,此时改脚本中的变量​​__name__​​将被设置为​​__main__​​,所以此时的测试语句将会被执行,输出相应的测试结果。


6. 总结

本文重点介绍了Python中常见的​​if __name__=="__main__"​​ ,重点分析了其背后的原理和应用的场景。

您学废了嘛?

一文弄懂Python中的 if __name__ == __main___python

关注公众号《AI算法之道》,获取更多AI算法资讯。

网友评论