程序入口
其实我们在写python的项目中,里面都会包含一个运行的程序入口,就比如Java和c#的Main()方法一样。
但是在python作为脚本语言是有区别,python文件在解释运行的时候,它是从脚本第一行开始运行,没有统一的入口。
一个 Python 源码文件除了可以被直接运行外,还可以作为模块(也就是库)被导入。不管是导入还是直接运行,最顶层的代码(也就是导入模块中的代码)都会被运行(Python 用缩进来区分代码层次)。而实际上在导入的时候,有一部分代码我们是不希望被运行的。
举个栗子:
1.新建test1.py文件:
PI = 3.14
def main():
print "PI:", PI
main()
2.新建area.py文件:
from test1 import PI
def calc_round_area(radius):
return PI * (radius ** 2)
def run_area():
print "this round :", calc_round_area(2)
if __name__ == "__main__" :
run_area()
在运行area.py的结果:
PI: 3.14
round area: 12.56
其实这个不是我们想要的结果,因为在运行area.py时,代码上面的import模块test1中的main()也被运行了一次。
然而,
在test1.py中加入一下代码后
if __name__ == "__main__" :
main()
结果却是
round area: 12.56
为什么会这样?!!
因为__name__
是作为一个内置变量,用于表示当前模块的名字。而刚才咱们在运行的模块(area.py
)同时,这个模块就是就是__main__
,所以就在test1中加入 if __name__ == "__main__" :
,因此,为false
,main()
就没有执行
应用博主的话就是“如果模块(area.py)是被直接运行的,则代码块被运行,如果模块(test1.py)是被导入的,则代码块不被运行。”
衍生出main和python -m的知识点
可以看一下博主的博客:http://blog.konghy.cn/2017/04/24/python-entry-program/
网友评论