Python中的if __name__ == ‘__main__‘什么意思?

什么是 __name__ 和 __main__ ?

为了解释这个问题,我们首先构造一个程序文件module1.py,内容如下:

def func1():
    print('hello')
    print('the __name__ of module1 is: ' + __name__)

if __name__ == '__main__': # 很显然,这是一个条件语句
    func1()
    print('Now it\'s in module1')

当我们运行module1.py时,输出的结果为:

hello
the __name__ of module1 is: __main__
Now it's in module1

由输出可以知道,此时__name__就等于__main__。其实,python代码在每次运行时,就会有一些初始化好的内置变量,而__name__就是其中之一。当在本文件(当前程序)中运行时,__name__就等于__main__,否则__name__等于所在文件/模块的名称。

与module1.py在同一文件夹下,我们构造module2.py,内容如下:

import module1

module1.func1()

print('the __name__ of module2 is: ' + __name__)

运行modul2.py,输出为

hello
the __name__ of module1 is: module1
the __name__ of module2 is: __main__

上述输出结果证明了在当前环境下,func1中的__name__等于它所在的模块/文件名,即module1;而当前文件的__name__等于__main__

什么是 if __name__ == ‘__main__’ ?

现在这个问题就很简单了。这条语句的意思就是:检查当前环境下的__name__是否等于__main__,如果等于,就执行if语句体的内容。

if __name__ == ‘__main__’ 有什么用?

if __name__ == '__main__'这条语句只有在__name__所对应的文件下才会满足条件,所以,if语句体(body)的内容也只有在对应文件下才会执行,而这一特点在python设计模块(module)时带来极大的便利。

当我们设计好一个模块后,我们想运行一些测试代码,而这些测试代码我们不希望在别的文件import本模块时引入,造成干扰。解决方案就是我们把测试代码放入if __name__ == '__main__'之后,这样,只有在运行测试本模块(本文件)时,测试代码才会执行。

你可能感兴趣的:(python)