目录
学习 Python 编程时,经常会遇到下述代码:
if __name__ == '__main__':
main()
但似乎有它没它,脚本本身也能正常运行。这未免丈二和尚,摸不着头脑,何必多此一举呢?
话说存在的就是合理的,就让我们看一下这句代码的作用和意义。
首先理解 __name__ (前后均为两条下划线)变量的含义。
1、__name__ 变量
__name__ 为 Python 的内置变量,可为 dir(__builtins__) 函数所查看,其数据类型为字符串。
以当前目录 testA.py 文件为例,其代码为:
运行该文件,结果为:
可见,对于当前文件,其 __name__ == '__main__',也即 if __name__ == '__main__' 结果为 True。
2、模块导入
Python 编程时,经常在当前文件顶端导入其它模块,只要运行到该 import 语句,导入模块的代码便会被执行。
同样以当前目录 testB.py 文件为例,其代码为:
运行该文件,结果为:
可见模块 testA 被导入后运行的结果为模块名,而非 __name__ 变量值 __main__。
为进一步说明问题,将 testA.py 代码修改为:
分别运行 testA.py 和 testB.py,结果为:
可见,运行 testB 时 testA 并未被执行,也即对testA 而言,if __name__ == '__main__' 结果为 False。
综上可见,if __name__ == '__main__': 判断语句的主要作用就是:
- 直接运行文件时,结果为 True,当前模块被执行
- 导入运行文件时,结果为 False,当前模块不被执行
妥妥非请勿扰的赶脚……
3、程序入口
此外,与 Java、C、C++ 等汇编语言不同,Python 作为解释型脚本语言,执行时无需将所有代码先行编译成中间代码,而是自模块顶行开始,逐行进行翻译执行,并不需要统一的 main() 函数作为程序的入口。因此,从某种意义上讲,if __name__ == ’__main__': 就像一个标志,告诉你,代码入口在此。一定意义上也有利于规范代码写作吧。