一. 在解释之前首先我们看下 __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 下面的语句
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐