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