美文网首页
浅谈Python 中的 if __name__ == '

浅谈Python 中的 if __name__ == '

作者: BourneKing | 来源:发表于2018-05-12 18:18 被阅读10次

程序入口

其实我们在写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/

相关文章

网友评论

      本文标题:浅谈Python 中的 if __name__ == '

      本文链接:https://www.haomeiwen.com/subject/yyjhdftx.html