欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python中if __name__ == '__main__'

程序员文章站 2022-05-19 14:23:12
...

最近在写python程序时遇到了if name == ‘main’(下划线由于),不清楚到底是什么含义,后来查阅了一些资料才明白了,总结下来供他人参考。

首先我们知道一个python文件有两种两种方式,第一个是直接作为脚本执行,第二个是在其他文件的python脚本中被调用执行,因此 if name == 'main’的作用就是控制这两种执行代码的过程,当文件作为脚本直接运行时,if name == 'main’才会被执行,而当文件被import时,if name == 'main’不会被执行。

新建一个.py文件:

print('i first')
if __name__=='__main__':
    print('i second')

打开CMD,在命令提示符里面输入python a.py回车,结果如下:
python中if __name__ == '__main__'
这里可以看到if name == 'main’前后的程序都被执行了。接着又新建一个.py文件,在里面写入:

import a

和上面一样运行b.py结果如下:
python中if __name__ == '__main__'
我们会发现,程序只执行了if name ==‘main ’前面的程序,之后的并没有被执行。

原来每个python模块(文件)都包含内置的变量 name,当运行模块时,__name__等于文件名(包含了.py);但是当模块被import到其他模块中去的时候,则__name__等于模块名称(不包含.py)。而__main__一直始终等于当前执行文件的名称(包含.py)。进而当模块被执行时,name ==‘main ’为真。
为了测试__name__名称,在a.py加入如下一代码:

print('i first')
print(__name__)
if __name__=='__main__':
    print('i second')

执行a.py得到如下结果:
python中if __name__ == '__main__'
可以看到此时变量__name__的值为__main__,其实__name__和__main__的之都应该是a.py;
在运行b.py执行结果如下:
python中if __name__ == '__main__'
此时,a.py中的__name__变量值为a,而不是a.py,不满足__name__ ==‘main ’,因此不执行下面的代码。