"if __name__ == '__main__':
" 实现的功能就是Make a script both importable and executable
关于代码if __name__ == '__main__'
:` 可能看了之后可能挺晕的,下面举几个例子解释下,希望能让大家对这行的代码的功能有更深的认识,还是那句话,欢迎大家指正定会虚心接受。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
' a test module '
def addFunc(a,b):
return a+b
print('atestmodule计算结果:',addFunc(1,1))
再编写一个模块anothertestmodule.py来调用上面的模块:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
' a test module '
import atestmodule
print('调用anothermodule模块执行的结果是:',atestmodule.addFunc(12,23))
在刚才两个模块的路径(我的路径为:“C:\work”)中打开cmd,用命令行运行atestmodule.py:
C:\work>python atestmodule.py atestmodule计算结果: 2
在刚才两个模块的路径中打开,用命令行运行anothertestmodule.py:C:\work>python anothertestmodule.py atestmodule计算结果: 2 调用test模块执行的结果是:
35#显然,当我运行anothertestmodule.py后第一句并不是调用者所需要的,为了解决这一问题,Python提供了一个系统变量:
__name__
#注:name两边各有2个下划线
__name__
有2个取值:当模块是被调用执行的,取值为模块的名字;当模块是直接执行的,则该变量取值为:__main__
于是乎,被调用模块的测试代码就可以写在if语句里了,如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
' a test module '
def addFunc(a,b):
return a+b
if __name__ == '__main__':
print('atestmodule计算结果:',addFunc(1,1))
C:\work>python atestmodule.py
atestmodule计算结果: 2
#结果并没有改变,因为调用atestmodule.py时,__name__
取值为__main__
,if判断为真,所以就输出上面的结果
C:\work>python anothertestmodule.py
调用test模块执行的结果是: 35
#此时我们就得到了预期结果,不输出多余的结果。能实现这一点的主要原因在于当调用一个module时,此时的__name__取值为模块的名字,所以if判断为假,不执行后续代码。
所以代码if __name__ == '__main__':
实现的功能就是Make a script both importable and executable,也就是说可以让模块既可以导入到别的模块中用,另外该模块自己也可执行。