1. 引言
在Python相关代码中,我们经常会遇到如下代码段:
#stuffif __name__ =="__main__":#dostuff
本文将尽可能使用简单的样例来解释这里发生了什么,以及需要使用
if __name__=="__main__"
的情形。请注意,上述代码中
name
和
main
前后有2个下划线字符。
闲话少说,我们直接开始吧!
2. 特殊变量
当我们正常运行我们的
Python
脚本时,该脚本中的变量
__name__
的值一般为
__main__
。我们来看个示例:
#first.pyprint(__name__)
我们在终端中运行上述脚本,代码如下:
python first.py
输出如下:
__main__
观察上述输出,当我们运行脚本
first.py
的时候,变量
__name__
的值被设置为
__main__
。
3. 复杂的例子
上述示例相对简单,也相对容易理解。接着我们来举个具有多个文件的例子,这里假设我们有三个脚本,分别为
a.py
,
b.py
以及
c.py
。
其中,
a.py
的内容如下:
#a.pyprint("__name__ in a.py:", __name__)
from b import*
from c import*
此时,
b.py
的内容如下:
#b.pyprint("__name__ in b.py:", __name__)
c.py
的内容如下:
#c.pyprint("__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__"
,重点分析了其背后的原理和应用的场景。
您学废了嘛?
关注公众号《AI算法之道》,获取更多AI算法资讯。
版权归原作者 赵卓不凡 所有, 如有侵权,请联系我们删除。