关于python中的 if __name__ == 'main'

name 是内置变量,它表示的是当前所在模块的名字,同时还能反应一个包的结构。python

 

a
├── b
│   ├── c.py
│   └── __init__.py
└── __init__.py函数

 

目录中全部的py文件的内容都为:测试

python(__name__)ui

 

模块名其实就是import时,要用到的名字。编码

 

若是一个模块直接被运行,则其没有包结构。其__name__值就为__main__spa

 

 

python属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,而是动态的逐行解释运行。也就是从脚本第一行开始运行,没有统一的入口。code

一个 Python 源码文件除了能够被直接运行外,还能够做为模块(也就是库)被导入。无论是导入仍是直接运行,最顶层的代码都会被运行(Python 用缩进来区分代码层次)。而实际上在导入的时候,有一部分代码咱们是不但愿被运行的。blog

举一个例子来讲明一下,假设咱们有一个 const.py 文件,内容以下:get

PI = 3.14

def main():
    print "PI:", PI

main()

咱们在这个文件里边定义了一些常量,而后又写了一个 main 函数来输出定义的常量,最后运行 main 函数就至关于对定义作一遍人工检查,看看值设置的都对不对。而后咱们直接执行该文件(python const.py),输出:源码

PI: 3.14

如今,咱们有一个 area.py 文件,用于计算圆的面积,该文件里边须要用到 const.py 文件中的 PI 变量,那么咱们从 const.py 中把 PI 变量导入到 area.py 中:

from const import PI

def calc_round_area(radius):
    return PI * (radius ** 2)

def main():
    print "round area: ", calc_round_area(2)

main()

运行 area.py,输出结果:

PI: 3.14
round area:  12.56

 

能够看到,const 中的 main 函数也被运行了,实际上咱们是不但愿它被运行,提供 main 也只是为了对常量定义进行下测试。这时,if __name__ == '__main__' 就派上了用场。把 const.py 改一下:

PI = 3.14

def main():
    print "PI:", PI

if __name__ == "__main__":
    main()

而后再运行 area.py,输出以下:

round area:  12.56

再运行下 const.py,输出以下:

PI: 3.14

 

这才是咱们想要的效果。

if __name__ == '__main__' 就至关因而 Python 模拟的程序入口。Python 自己并无规定这么写,这只是一种编码习惯。因为模块之间相互引用,不一样模块可能都有这样的定义,而入口程序只能有一个。到底哪一个入口程序被选中,这取决于 __name__ 的值。

 

参考连接:

  http://blog.konghy.cn/2017/04/24/python-entry-program/

  http://www.tuicool.com/articles/jMzqYzF

  http://stackoverflow.com/questions/4042905/what-is-main-py

相关文章
相关标签/搜索