python 内置函数__name__的作用

(1)背景:在python中每个独立的python文件,都是一个模块。在导入文件时,文件中没有任何缩进的代码(即主方法)都会被执行一遍。

(2)在实际开发中,开发人员会在主方法中增加一些测试代码,比如测试一下函数是否正常执行,打印一些日志等。在不作处理的情况下,如果在其它文件中导入该模块,将会自动执行这些测试代码,一般这是不允许的。

1 # 文件1
2 # 文件名:测试模块1.py
3 
4 def say_hello():
5     print("hello world")
6 
7 print("这是测试模块1")
8 say_hello()
1 # 文件2  导入文件1
2 # 文件名:test.py
3 
4 import 测试模块1
5 
6 # 不必添加任何代码,直接运行该文件,控制台会输出文件1的测试代码
7 #这是测试模块1
8 #hello world

(3)此时要解决导入模块自动执行测试代码的问题,就轮到主人公"__name__"内置函数的出场了:

  ·作用:__name__ 属性可以做到,测试模块的代码只在测试情况下被运行,而在被导入时不会被执行。

  __name__ 记录着一个字符串:①当前执行的程序调用__name__ ,返回的字符串是" __main__ ";

                ②如果是被其它文件导入,__name__ 返回的字符串则是导入文件的文件名。

# 文件1
# 文件名:测试模块1.py

def say_hello():
    print("hello world")

print(__name__)
print("这是测试模块1")
say_hello()

# 控制台输出
#__main__
#这是测试模块1
#hello world
# 文件2  导入文件1
# 文件名:test.py
 
import 测试模块1

# 不必添加任何代码,直接运行该文件,控制台会输出文件1的测试代码
#测试模块1
#这是测试模块1
#hello world

利用 __name__ 的这个属性,我们可以改造文件1的代码,解决测试代码自动执行的问题:

# 文件1
# 文件名:测试模块1.py

def say_hello():
    print("hello world")

if __name__ == "__main__":
    print(__name__)
    print("这是测试模块1")
    say_hello()

再次执行文件2,控制台就不会有测试代码的输出了。

posted @ 2019-09-07 14:04  飞走失恋  阅读(2167)  评论(0编辑  收藏  举报