关于’__name __’
首先创建两个py文件A.py和B.py,我们来看一下他们各自的‘__name __’属性。
A.py
print('this is A.my __name__ is: '+__name__)
B.py
print('this is B.my __name__ is: '+__name__)
输出结果如下:
由此可见它们的__name__属性都是__main__。如果我们在A中引入B,即
在A的文件中加入import B语句。再看一下各自的__name__属性。
A.py:
import B
print('this is A.my __name__ is: '+__name__)
执行结果:
当B被引入时,B的__name__属性变成了自己的文件名,A依然是__main__。
为什么要使用 if __name __ == ‘__main’
可以看到刚才A在导入B的时候,B中的输出语句被自动执行了,这显然不是我们想看到的。一个py文件作为模块被导入的时,其中的函数会自动执行。在B.py中加入 if__name__ == ‘main’ 。把B中的print语句写在if 判断的下面。
if __name__ == '__main__' :
print('this is B.my __name__ is: '+__name__)
再次执行A。结果如下:
这次执行结果中就没有了B的输出语句。在设计一个被其他文件引入的模块时,可以将函数调用语句放到 if__name__ == ‘main’ 下面。这样import模块时就不会自动执行了。因为被引入的模块的 name__属性是文件名,不是__main___。
以上是我的粗浅理解。