一般在脚本模块中,我们希望自己写的脚本模块既可以导入到别的模块中使用,又能够自己直接执行。
举个例子:
先写一个模块:
#module.py
def main():
print 'this is in %s' %__name__
if __name__=='__main__':
main()
这个模块中定义了一个main()函数,直接执行后得到的结果是‘this is in __main__’,说明if语句中的内容执行,调用了main();
如果从另外一个模块中import该模块,并调用main()函数,那么会得到什么样的结果呢?
#anotherModule.py
from module import main
main()
运行anotherModule.py文件后得到的结果是'this is in module'。这说明module.py模块中的if语句的内容没有执行。这样就能够让模块自己能够运行,并且能够被其他模块引入。
Conclusion:
如果直接执行某个模块时,该文件中的__name__=='__main__'就是True,该if语句中的内容会得到执行;但是如果被当做模块引入时,这时__name__的值就是这个模块的名字。
这个功能的另一个用处是调试代码:在“if __name__=='__main__':”中加入调试代码,就可以让外部模块调用时不执行这部分的调试代码,但是如果想排查问题时,可以直接执行该模块文件来进行调试,其中的调试代码会得到执行。