程序入口
对于很多编程语言来说,程序都必须要有一个入口,比如C,C++,以及完全面向对象的编程语言Java,C#等。如果你接触过这些语言,对于程序入口这个概念应该很好理解,C,C++都需要有一个main函数作为程序的入口,也就是程序的运行会从main函数开始。同样,Java,C#必须要有一个包含Main方法的主类,作为程序入口。
而Python则不同,它属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,而是动态的逐行解释运行。也就是从脚本第一行开始运行,没有统一的入口。
在Python,我们经常会编写
1 | if __name__ == '__main__' |
这么一段代码,这段代码该怎么来理解?
这段代码的功能理解如下:
一个python的文件有两种使用的方法:
- 作用一,直接作为脚本执行。
- 作用二,import到其他的python脚本中被调用(模块重用)执行。
if __name__ == '__main__'
: 的作用就是控制这两种情况执行代码的过程,在if __name__ == '__main__':
下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而import到其他脚本中是不会被执行的。
运行原理
每个python模块(python文件)都包含内置的变量__name__
,当运行模块被执行的时候,__name__
等于文件名(包含了后缀.py)。如果import到其他模块中,则__name__
等于模块名称(不包含后缀.py)。而__main__
等于当前执行文件的名称(包含了后缀.py)。所以当模块被直接执行时,__name__ == '__main__'
结果为真;而当模块被import到其他模块中时,__name__ == '__main__'
结果为假,就是不调用对应的方法。
简而言之就是:__name__
是当前模块名,当模块被直接运行时模块名为__main__
。当模块被直接运行时,代码将被运行,当模块是被导入时,代码不被运行。