python中if __name__ == '__main__'
最近在写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回车,结果如下:
这里可以看到if name == 'main’前后的程序都被执行了。接着又新建一个.py文件,在里面写入:
import a
和上面一样运行b.py结果如下:
我们会发现,程序只执行了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得到如下结果:
可以看到此时变量__name__的值为__main__,其实__name__和__main__的之都应该是a.py;
在运行b.py执行结果如下:
此时,a.py中的__name__变量值为a,而不是a.py,不满足__name__ ==‘main ’,因此不执行下面的代码。