关于Python 中 常见语句 if__name__ == ‘__main__‘: 的理解
关于Python 中 常见语句 if__name__ == '__main__': 的理解
欢迎学习交流!
邮箱: z…@1…6.com
网站: https://zephyrhours.github.io/
在学习别人共享的python代码时,经常会在脚本后面看到如下的代码块:
if__name__ == '__main__':
笔者在学习中也经常对此语句感到困惑,看完网上一些关于对这个语句解释的博文,也总是阅读完了不理解,反而变得更困惑。
下面说一下笔者对这个语句的通俗理解,希望对您的学习工作有所帮助。
一、Python中变量和方法中的双下划线
进行详细解释前,首先需要对这个语句中包含的__name__
和__main__
进行简单的介绍。
在python中,经常会见到带有双下滑线的变量和方法,如常见的:
__future__
__all__
__version__
__author__
__name__
其实这类方法被称为python的魔法函数,可以理解为python内的私有方法,我们不能通过外部调用对其属性进行修改。通俗理解就是:这里的__name__
是python内置的方法,每个脚本都有,其实就是当前脚本的名称。
注意: 如果对这些混淆概念不太清楚,具体关于对象,类,方法,函数,属性的区别和理解,请看笔者博客:
二、Python脚本运行的两种方式,以及__name__
在不同运行方式下的变化
基于python编写的脚本运行方式有两种:
在不同的运行方式下,__name__
也会随之发上变化,具体如下:
__name__==__main__
__name__==脚本名称
讲到这里,这个问题就显得很清楚了, 通俗的理解就是: 只有在脚本单独运行时,代码块 if__name__ == '__main__':
才会运行,当该脚本中的方法、类被其他脚本调用时,代码块 if__name__ == '__main__':
将会失效。
为了更清楚的理解,下面来看具体的实例分析。
三、具体的实例分析
下面给出具体的实例分析,静下心来把下面这个案例看懂,应该就彻底理解了这行代码的含义。
首先我们先在Test文件夹下定义两个python脚本文件,名称为:
文件夹的具体结构如下,

然后我们首先对
demo1.py
脚本文件进行分析,其内部代码如下:print('__name__:',__name__)
print('hello, this is one!')
if __name__ == '__main__':
print('hello, this is two!')
print('running this part')
直接运行该脚本,具体运行结果如下:
从这里可以看到,当直接单独运行该脚本demo1.py
时,它的名称为__main__
,此时,该脚本中的函数print('__name__:',__name__)
和print('hello, this is one!')
在运行完成后,后面的代码块
if __name__ == '__main__':
print('hello, this is two!')
print('running this part')
的内部的方法, print('hello, this is two!')
和 print('running this part')
也参与了运行。
下面定义脚本demo2.py
,具体代码如下:
import demo1
print('This is demo2.py')
当脚本demo1.py
被脚本demo2.py
调用时,运行结果如下:
可以看到:
demo2.py
中调用脚本demo1.py
时,它的名称由原来直接运行demo1.py
时的 '__main__'
变成了demo1
,demo1.py
中的代码if __name__ == '__main__':
条件不成立,所以其后面的函数print('hello, this is two!')
和print('running this part')
也将不会被执行。总结:
脚本函数中的代码块if __name__ == '__main__':
只有在直接运行该当前脚本时才会生效,而当被其他脚本调用时,这部分代码块失效。
来源:独不懂