0


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

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算法资讯。


本文转载自: https://blog.csdn.net/sgzqc/article/details/124849467
版权归原作者 赵卓不凡 所有, 如有侵权,请联系我们删除。

“一文弄懂Python中的 if __name__ == __main__”的评论:

还没有评论