不同语言不同程序入口
对于不同的语言而言,每个程序都需要有一个入口,例如java,在类中需要一个main函数来作为程序的入口。
而Python属于脚本语言,不同于编译型语言那样,需要先将程序编译为二进制在运行,Python本身是动态的逐行解释运行,也就是从脚本程序的第一行开始运行,没有统一的入口。
一个Python源码文件除了可以被直接运行外,还可以作为模块(库)被导入到别的脚本程序中,因此在这里作为被导入的库中,有一些代码是我们不希望被执行的。
例子
举个例子来说:
有一个物体质量m=10,g=9.8(重力参数),求它的重力。
公式:G=m*g
所以创建一个param.py的文件,其中代码如下:
#coding=utf-8
#重力参数
g = 9.8
def main():
print ("g:",g)
main()
运行结果下图:
控制台打印出 , g : 9.8
在创建一个sum.py的文件求G,代码如下:
#coding=utf-8
#在这里我们将上面文件定义的param中的g作为重力参数引入到其中
from param import g
#计算重力的函数
def calc_G(m):
G = m*g
return G
def main():
print ("G:",calc_G(10))
main()
打印出:
g: 9.8
G: 98.0
结果可以看到,在param.py文件中的main函数也被执行了,而实际上我们并不希望它被执行,此时标题中的
if __name__ == '__main__'
便派上了用场。我们将param.py中稍作修改:
#coding=utf-8
#重力参数
g = 9.8
def main():
print ("g:",g)
if __name__ == '__main__':
main()
再次运行sum.py:
看结果此时输出的是:
G: 98.0
if __name__ == ‘__main__’
if __name__ == '__main__'
相当于Python 模拟的程序入口。Python 本身并没有规定这么写,这只是一种编码习惯。由于模块之间相互引用,不同模块可能都有这样的定义,而入口程序只能有一个。到底哪个入口程序被选中,这取决于 __name__
的值。
__name__
是内置变量,用于表示当前模块的名字。
结论
所以,if __name__ == '__main__'
我们简单的理解就是: 如果模块是被直接运行的,则代码块被运行,如果模块是被导入的,则代码块不被运行。