if __ name __ == ’ __ main __'的意思

案例:
编写一个测试模块test.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' a test module '

def addFunc(a,b):
return a+b

print('test :1+1的计算结果:',addFunc(1,1))


1
2
3
4
5
6
7
8
9
10
11
再写一个新的mode.py文件来调用上方模块

import test

print('调用test模块执行的结果是:',test.addFunc(12,23))
1
2
3
运行test.py文件 正常运行

运行mode.py文件
可以看到 test.py 中的测试代码也被执行了一遍


显然,当运行mode.py后第一句结果并不是调用者所需要的,为了解决这一问题,Python提供了一个系统变量: __ name __
这时我们修改一下test.py的代码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' a test module '

def addFunc(a,b):
return a+b

if __name__=='__main__':
print('test :1+1的计算结果:',addFunc(1,1))

1
2
3
4
5
6
7
8
9
10
11
再次运行test.py 程序正常运行


这时再运行mode.py 发现程序运行结果正确


详解:
一个python的文件有两种使用的方法:

1,直接作为脚本执行。
2,import到其他的python脚本(.py文件)中导入被作为模块调用执行。
if name == ‘main’: 的作用就是控制这两种情况执行代码的过程,在if name == ‘main’: 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而import到其他脚本中作为模块使用是不会被执行的。

简单来说:

if __ name __ == ’ __ main __'的意思是:当.py文件被直接运行时,if __ name __== ’ __ main __'之下的代码块将被运行;
当.py文件以模块形式被导入时,if __ _name __== ’ __ main __'之下的代码块不被运行。


__ name __
那么if __ name __ == ’ __ main __’ 这句代码具体是怎么实现的呢

__name__ 是系统内置变量,用于表示当前模块的名字,即所在文件名


1 当Pyhon模块直接运行时,__name__的值为“main”;


2 当模块被导入到其他文件作为import模块使用时, 该模块的__ name __为模块本身的名字 比如上方的test.py 作为模块被 mode.py引用时 test.py的 __ name __值就是 test

也就是说:
__name__有2个取值:

当模块是被调用执行的,取值为模块的名字;
当模块是直接执行的,则该变量取值为:__ main __
if name == ‘main’: 这句话的核心无非就是在判断该程序文件是否作为主程序入口。如果直接运行该程序文件,该文件作为主程序入口,name == ‘main’ 主程序 。
如果在运行主程序的时候调用其他程序文件,其他程序入口name != ‘main’ 自然就不等于main主程序 。
————————————————
版权声明:本文为CSDN博主「Z小旋」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/as480133937/article/details/104093564

posted on 2023-05-22 20:27  上山打老虎下山采蘑菇  阅读(74)  评论(0编辑  收藏  举报

导航