Python中关于if __name__=='__main__'的问题

时间:2023-03-10 05:12:09
Python中关于if __name__=='__main__'的问题

先举一个简单的例子:

这里有两个.py的文件,a.py和b.py

a.py内容为:

Python中关于if __name__=='__main__'的问题

b.py的内容为:

Python中关于if __name__=='__main__'的问题

当执行b.py时结果为:

Python中关于if __name__=='__main__'的问题

也就是将a.py文件里的内容执行一边,b.py里的内容执行一边,这显然不是我们想要的,我们只是想借用a.py模块里的PI常量。

如果两个文件里的代码改成如下:

Python中关于if __name__=='__main__'的问题Python中关于if __name__=='__main__'的问题

执行结果:

Python中关于if __name__=='__main__'的问题

这就没问题了。原因在于:

python文件既可以用来直接执行,也可以作为模块被导入。  

其中__name__是模块的内置属性,而这个内置属性的值取决于这个.py文件的使用方式,即是作为模块导入还是直接执行。 
如果是直接执行,那么这个__name__的值就是’__main__‘,如果你作为一个模块导入,那么这个内置属性值就取决于这个文件名(不包含路径和文件扩展名)。 
所以我们在看到一个这样的句子时 
if name == ‘main‘: 
  main() 
时,就是文件在执行时要执行这个main()函数