Python if __name__ == '__main__'

在 Python 中,if __name __ == '__main __' 表示以主程序形式运行。下面我们先通过一个简单的例子来讲解为什么要使用 if __name __ == ' __main __',然后再介绍它在实际开发中是如何使用的。

为什么使用 if __name __ == '__main__'?

在介绍 if __name __ == '__main__' 之前,先来看一个简单的例子。首先在当前项目下创建一个名为 “mytools” 的,然后在这个包里面创建一个模块:compute.py,整个项目结构如下图所示。

Python if name == 'main'

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

上一篇: Python 包与模块

下一篇: Python pip 命令

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号