python 中__name__ = '__main__' 的作用
Python Script 是应用广泛的一种批量自动化处理方案,同时任何的.py扩展文件在Python执行程序中都可以充当Module文件来使用。从Python一切皆对象的设计理念来说,只要将.py的扩展文件导入Python执行程序中后,我们就可以使用一些Python的内置方法。
#hello.py
def sayHello():
str="hello"
print(str);
if __name__ == "__main__": #main program 程序入口
print ('This is main of module "hello.py"')
sayHello()
当单独执行该module时,比如单独执行以上hello.py: python hello.py,则输出
This is main of module "hello.py"
hello
可以理解为"if __name__=="__main__":" 这一句与c中的main()函数所表述的是一致的,即作为入口
当该module被其它module 引入使用时,其中的"if __name__=="__main__":"所表示的Block不会被执行,这是因为此时module被其它module引用时,其__name__的 值将发生变化,__name__的值将会是module的名字。比如在python shell中import hello后,查看hello.__name__:
>>> import hello
>>> hello.__name__
'hello'
>>>
有句话经典的概括了这段代码的意义:“Make a script both importable and executable”
意思就是说让你写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行。
在cmd 中直接运行.py文件,则__name__的值是'__main__';
而在import 一个.py文件后,__name__的值就不是'__main__'了;
用if __name__ == '__main__'来判断是否是在直接运行该.py文件
这样既可以让“模块”文件运行,也可以被其他模块引入,而且不会执行函数2次。
总结一下:
如果我们是直接执行某个.py文件的时候,该文件中那么”__name__ == '__main__'“是True,但是我们如果从另外一个.py文件通过import导入该文件的时候,这时__name__的值就是我们这个py文件的名字而不是__main__。
这个功能还有一个用处:调试代码的时候,在”if __name__ == '__main__'“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行!