python:if __name__ == '__main__' 理解与使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SCF_1104/article/details/83900667

对于刚接触python的初学者来说,经常会发现一些python代码文件最后会有这么一段

if __name__ == '__main__' :
    main()
    ....

那么这句话是什么意思呢?

有句话经典的概括了这段代码的含义: “Make a script both importable and executable”

意思就是说让你写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行。这句话,可能一开始听的还不是很懂。

通俗的理解__name__ == '__main__':

假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明');

                               在你自己眼中,你是你自己(__name__ == '__main__')。

if __name__ == '__main__'的意思是:

当.py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行;

当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行。

下面我们举例来说明。

先写一个模块(或者说第一个.py文件)

# first.py

def main():
    print('we are in %s' % __name__)

if __name__ == '__main__':
    main()
    print('-----------ending---------')

直接运行first.py文件,运行结果是:

we are in __main__
-----------ending---------

通过运行结果,我们可以分析出:

       当我们直接运行first.py文件,__name__的值就是 __main__。也就是上文所说的“在你自己眼中,你就是你自己

然后我们再写另一个模块(或者说另一个.py文件)

# second.py

from first import main    # 将first.py文件以模块形式导入sencond.py文件
main()    # 调用first.py文件中的main方法

我们运行second.py文件,运行结果是:

we are in first

通过运行结果,我们可以分析出:

一、当我们将first.py文件以模块形式导入sencond.py文件,__name__的值就是 first。也就是上文所说的“在你朋友(second)的眼中,你是你(first)

二、我们发现 first.py文件中的if语句之后的代码没有被运行,因为此时的__name__是first,而不是__main__。

总结:

如果我们是直接执行某个.py文件的时候,该文件中那么”__name__ == '__main__'“是True,但如果我们从另外一个.py文件通过import导入该文件的时候,这时__name__的值就是我们这个py文件的名字而不是__main__。

这个功能还有一个用处:调试代码的时候,在”if __name__ == '__main__'“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行!

猜你喜欢

转载自blog.csdn.net/SCF_1104/article/details/83900667