本文转载:
https://xiaochuhe.blog.csdn.net/article/details/122395447?spm=1001.2014.3001.5502
前言:在python慢慢学习路中,经常会遇到if name == "__main__",而且会发现不写这句话,代码依旧可以执行。心里就有一百个疑问,通过大神指导,小编终于理解啦!今天小编就通过具体的例子详细介绍为什么代码中会加上这句话。
目的:代码中加上if name == '__main__'的目的,也是这篇文章最终要阐述的:
用来控制.py文件在不同的应用场景下执行不同的逻辑,也可以在if name == '__main__'里面加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行!
一、发散思维理解python文件
百度这么解释python 的:
Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。Python解释器易于扩展,可以使用C语言或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python 也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。
注意这个关键词:解释
其实一个编写好的一个python文件可以有两种用途:
一:脚本,一个文件就是整个程序,用来被执行(当前执行文件)
二:模块,文件中存放着一堆功能,用来被导入使用
尤其第二个模块,所以我们经常会遇到pip install 各种模块其实就是python主目录下没有这个脚本而已,下载了就是放在主目录下方便运行的,细心的朋友们下次下好模块后可以去看看!
二、全方面理解全局变量__name__
通透下面两句话:
1.当文件被当做脚本执行时:__name__ 等于'__main__'
2.当文件被当做模块导入时:__name__等于文件名(模块名)
举例说明:同一个目录下创建两个py文件,一个是test1.py,一个是test2.py。
举例当文件被当作脚本执行时,在test1.py里面输入下面代码:
print (__name__)
test1.py输出结果:
举例当文件被当作模块导入时,test1.py里面为空,test2.py里面输入下面代码:
import test1 #导入test1模块
print (test1.__name__) #输出test1.py的文件名,也就是模块名
test2.py输出结果:
三、实例详细弄懂if name == '__main__'用法
举例说明:同样同一个目录下创建两个py文件,一个是test1.py,一个是test2.py。
先举例说明,不加if name == '__main__',把test1.py当作模块导入
test1.py代码如下:
from colorama import Fore
print (Fore.YELLOW + "天不生我李淳罡,剑道万古如长夜!")
输出结果:
test2.py代码如下:
from colorama import Fore
import test1 #导入test1模块
print (Fore.BLUE + "杀世子,夺青鸟!") #输出test1.py的文件名
输出结果:
思考:为什么明明只想打印出’杀世子,夺青鸟!',却把’天不生我李淳罡,剑道万古如长夜‘也打印出来了?
最后举例说明,加上if name == '__main__',依旧把test1.py当作模块导入
test1.py代码如下:
from colorama import Fore
if __name__ == '__main__':
print (Fore.YELLOW + "天不生我李淳罡,剑道万古如长夜!")
输出结果:
test2.py代码如下:
from colorama import Fore
import test1 #导入test1模块
print (Fore.BLUE + "杀世子,夺青鸟!") #输出test1.py的文件名
输出结果:
思考:此时test1.py输出结果’天不生我李淳罡,剑道万古如长夜‘,为什么又不在test2.py里面出现了?
回头再看,文章所阐述的目的,相信大家都懂了,原创不易,切勿抄袭,谢谢!