在 Python 中,if __name __ == '__main __' 表示以主程序形式运行。下面我们先通过一个简单的例子来讲解为什么要使用 if __name __ == ' __main __',然后再介绍它在实际开发中是如何使用的。
为什么使用 if __name __ == '__main__'?
在介绍 if __name __ == '__main__' 之前,先来看一个简单的例子。首先在当前项目下创建一个名为 “mytools” 的包,然后在这个包里面创建一个模块:compute.py,整个项目结构如下图所示。

compute.py 代码如下:
def add(x, y):
return x + y
# 测试部分
print('The 1st test:', add(10, 20))
print('The 2nd test:', add(30, 40))
test.py 代码如下:
import mytools.compute as cp
print(cp.add(50, 60))
运行 test.py 之后,运行结果如下:
The 1st test: 30
The 2nd test: 70
110
分析:
这显然不是我们想要的结果,预期的结果应该只有 110 才对,但是这里却把 compute 模块中的测试部分也执行了。想要避免 compute 模块中的测试部分被执行,这时就应该使用主程序形式来执行,修改后的 compute.py 代码如下:
def add(x, y):
return x + y
# 测试部分
if __name__ == '__main__':
print('The 1st test:', add(10, 20))
print('The 2nd test:', add(30, 40))
再次运行 test.py,此时运行结果如下:
110
如何使用 if __name __ == '__main__'?
在 Python 中,对于主程序形式,我们使用的是下面这种语法格式。
语法:
if __name__ == '__main__':
……
说明:
__name __ 是一个内置变量,它有以下 2 个作用:
- 如果模块是被导入的,则 __name __ 的值为该模块名字。
- 如果模块是被直接执行的,则 __name __ 的值为 '__main__'。
比如在当前 .py 文件中执行下面这一句代码,输出的结果就是 '__main__'。
print(__name__)
if __name __ == '__main__' 相当于 Python 模拟的程序入口,有点类似于 C 或 C++ 中的 main()。对于 if __name __ == '__main__' 来说,需要分为以下 2 种情况来考虑。
- 如果当前 .py 文件是被直接执行的,那么 if __name __ == '__main__' 内部的代码块将被执行。
- 如果当前 .py 文件是以模块的方式被其他 .py 导入时,if __name __ == '__main__' 内部的代码就不会被执行。
从上面可以知道,当在 VSCode 中执行 “py mytools/compute.py” 命令去直接运行修改后的 compute.py(注意是修改后,也就是加上 if __name __ == '__main__'),输出的结果如下所示。也就是说,此时 if __name __ == '__main__' 内部的代码块将被执行了。
The 1st test: 30
The 2nd test: 70
但是当我们运行 test.py,这个时候 compute.py 是以模块的方式被导入的,输出的结果如下。也就是说,此时 if __name __ == '__main__' 内部的代码块没有被执行。
110
