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/