if __name__ == '__main__'的作用和原理

最简单的理解就是这样:

    __name__ 是当前模块名,当模块被直接运行时,模块名为 __main__。

    所以 if __name__ == '__main__' 这句话的意思就是当前模块被直接运行时,以下代码将被执行,

  当模块是被其它程序导入时,代码块不会被执行。

1️⃣  举例分析

  第一步,新建一个.py文件。命名为 test.py,写入如下代码:

# -*-coding:utf-8  -*-

print('测试程序--函数外')

def main():
    print('测试程序--函数内')

if __name__ == '__main__':
    main()
    print('hello world')

  运行后,输出如下:

测试程序--函数外
测试程序--函数内
hello world

  第二步,在同一个文件夹下,新建一个文件,命名为 import_test.py,写入代码如下:

# -*-coding:utf-8 -*-

import test

  运行后结果如下:

测试程序--函数外

  通过对比不难发现,import_test.py与之前的test.py相比,只输出了 “测试程序--函数外”,也就是意味着 if __name__ == "__main__": 之前的语句被执行,

之后的没有执行。

  这是为什么呢?我们接着来分析!

  我们在 test.py程序中 if __name__ == "__main__":之前加入如下代码: 

print(__name__) # 将 __name__指定的内容打印出来

  现在test.py程序运行的结果如下:

测试程序--函数外
__main__    # 打印__name__的结果
测试程序--函数内
hello world

  可以看出,此时变量__name__的值为"__main__"。

  又到了对比的时候了,运行 import_test.py 程序,见证奇迹的时刻!

  import_test.py代码如下:

# -*- coding:utf-8-*-

import test

  结果如下:

测试程序--函数外
test          # 导入后,print(__name__)指向的是被导入的模块名

  此时,import_test.py中的__name__变量值为 test,不满足 __name__ == "__main__"的条件,因此,无法执行 if __name__ == "__main__": 后面的代码。

2️⃣  原理分析

  具体原理如下: 

由于每个Python模块(Python文件)都包含内置的变量__name__,当运行模块被执行的时候,__name__等于文件名(包含了后缀.py)。如果import到其他模块中,则__name__等于模块名称(不包含后缀.py)。而“__main__”等于当前执行文件的名称(包含了后缀.py)。所以当模块被直接执行时,__name__ == '__main__'结果为真;而当模块被import到其他模块中时,__name__ == '__main__'结果为假,就不调用对应的方法。

  简而言之

_name__ 是当前模块名,当模块被直接运行时模块名为 __main__ 。当模块被直接运行时,代码将被运行,当模块是被导入时,代码不被运行。

原文出自  https://mp.weixin.qq.com/s/QlLziPsuBO2rI0Q__xs9TQ ,本文根据自己的理解有部分改动,感谢原作者的分享。

  

  

猜你喜欢

转载自www.cnblogs.com/schut/p/9130146.html