(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,控制台就不会有测试代码的输出了。
原文:https://www.cnblogs.com/clearlove4396/p/11480506.html