一. 在解释之前首先我们看下 __name__ 这个变量存的是什么?
#!/usr/bin/env python
# -*- coding:utf-8 -*-
print(__name__)
# 执行结果:
__main__
结果分析:
-
当我们运行的本程序的时候,__name__ 这个内置变量值就是 __main__
二. 下面我们来看下导入模块时候 __name__ 变量值
- test.py代码:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
def main():
print("this is before if __name__:%s" % __name__)
if __name__=='__main__':
main()
print("this is after if __name__:%s" % __name__)
- 导入 test 模块并执行
#/usr/bin/env python
# -*- coding:utf-8 -*-
# 导入我们自定义的 test 模块
import test
# 调用 test 模块里的 main 方法
test.main()
# 执行结果:
# 此时 __name__ 指向的而是 test 模块的名字
this is before if __name__:test
结果分析:
-
可以看到,导入模块后变量 __name__ 值为 test 模块名,并 没有执行 if 中的语句。
总结:
- if __name__=='__main__' 说白了,就是判断 __name__ 变量是不是等于 __main__,
- 当执行文件本身时候 __name__ 变量等于 __main__,此时判断成立并执行判断语句中的代码
- 当调用该模块的时候 __name__ 并不等于__main__,条件不成立,不执行 if 判断下面的语句
- 这里可以认为为了方便调试模块,而在模块被导入的时候并不执行 if 下面的语句