我们在python模块那章节的学习,有所接触到if __name__ == '__main__'这个概念。当时我们只是大概描述了一番,不少伙伴还是有所困惑,今天就让我们通过实际例子去讲解这条语句到底有何含义。一个python文件有两种用途,一种被当主程序、脚本执行,另一种被当模块导入,为了区别同一个文件的不同用途,每个py文件都内置了__name__变量,该变量在py文件被当做脚本执行时赋值为“__main__”,在py文件被当做模块导入时赋值为模块名。
如模块my_module.py中,可以在文件末尾基于__name__在不同应用场景下值的不同来控制文件执行不同的逻辑,如下所示:
#encoding:UTF-8#本文件为:my_module.py...if __name__ == '__main__': my_module.py被当做脚本执行else: my_module.py被当做模块导入时执行
首先建立一个python文件,如test1.py,文件代码如下所示:
#encoding:UTF-8#本文件名为:test1.pydef print_hello(): print("欢迎关注公众号:浩道linux")print("本公众号给大家分享最有趣最实用的linux、python知识!")#打印__name__的值print(__name__)if __name__ == '__main__': print("test1.py当做脚本执行执行!!!")else: print("test1.py被当做模块导入时执行。。。")
运行以上代码,结果如下所示:
从结果看出,当执行test1.py本身文件时,变量__name__的值为__main__。
其次,再创建一个python文件,如test2.py,文件代码如下:
#encoding:UTF-8#本文件名为:test2.py#导入模块test1import test1test1.print_hello()print("代码执行结束********")
执行test2.py文件,结果如下所示:
通过模块那篇知识的学习,不难看出test2.py所执行原理以及结果。当test1.py被当成模块导入时,__name__的值由__main__变成了test1。
相信通过这两个例子的比较,已经弄懂if __name__ == '__main__'的用法了吧。用到该语句的场景一般就是我们写完一个函数代码,自己想调用执行测试,而又不希望自己写的代码被当成模块导入时,执行我们的测试代码。大家如果还有疑问,可以留言讨论,希望能给大家带来解惑。往期内容回顾:
干货之六:python常见面试题,你会多少?
平时你输入的验证码,竟是这么简单就实现了
python常见模块之time模块
python实战项目之---童年小游戏(附源码)