Python 中 __name__ == '__main__' 的作用
来源:互联网 发布:cf怎么老是网络异常 编辑:程序博客网 时间:2024/06/05 18:23
简述
经常,会在 Python 模块中看到 if __name__ == '__main__':
这样的代码,究竟有什么作用呢?
有句话经典地概括了这段代码的意义:
Make a script both importable and executable
意思是说:模块既可以被导入(到 Python shell 或者其他模块中),也可以作为脚本来执行。
- 简述
- __name__ 属性
- 让模块既可以导入又可以执行
- 通用形式
版权所有:一去丶二三里,转载请注明出处:http://blog.csdn.net/liang19890820
__name__
属性
所有模块都有一个内置的属性 __name__
,__name__
的值取决于如何使用这个模块。
例如,有一个名为 calc.py
的模块,包含以下代码:
print('__name__:', __name__)
当导入模块时,__name__
是模块的文件名:
>>> import calc__name__: calc
但是,如果将其作为脚本使用,__name__
就是一个特殊的值 __main__
:
$ python calc.py __name__: __main__
由此,可以得出一个结论:当模块被导入时,模块名称是文件名;而当模块作为脚本独立运行时,名称为 __main__
。
让模块既可以导入又可以执行
回到最初的问题:if __name__ == '__main__':
?
通过上面的结论,可以推断出:只有当模块直接运行(即:不导入)时,才会执行 if
块内的代码。
修改一下 calc.py
模块,内容如下:
def add(a, b): return a + bprint('test: 2 + 3 =', add(2, 3))
将其作为模块导入:
>>> import calctest: 2 + 3 = 5
再将其作为脚本来执行:
$ python calc.py test: 2 + 3 = 5
显然,无论使用哪种方式,都会执行打印语句。
如果模块只会被用作脚本,那没什么问题,但若希望将其作为一个导入模块时,往往不想打印出测试用例。在这种情况下,__name__
就派上用场了。
完善 calc.py
模块,为其添加一个 if
语句:
def add(a, b): return a + bif __name__ == '__main__': print('test: 2 + 3 =', add(2, 3))
这时,再导入模块,不会执行任何打印语句:
>>> import calc>>>
而将其作为脚本直接运行,却可以正常打印:
$ python calc.py test: 2 + 3 = 5
这就是 __name__
的神奇之处,可以利用这个特性为模块提供用户界面,或对模块进行测试(将模块作为脚本运行,来执行测试用例)。
通用形式
实际上,在 Python 中,一个名为 main
的函数没有任何特殊的作用。
然而,通常的做法是在 main
函数中组织一个程序的主要功能,并使用类似于以下代码进行调用:
def main(): try: doMainthing() return 0 except: return 1if __name__ == "__main__": sys.exit(main())
sys.exit()
用于退出程序,其中 0 表示正常退出,其他值表示异常退出。
- python 中__name__ = '__main__' 的作用
- python 中__name__ = '__main__' 的作用
- python 中__name__ = '__main__' 的作用
- python 中__name__ = '__main__' 的作用
- python 中__name__ = '__main__' 的作用
- python 中__name__ = '__main__' 的作用
- python 中__name__ = '__main__' 的作用
- python:浅析python 中__name__ = '__main__' 的作用
- python:浅析python 中__name__ = '__main__' 的作用
- python:浅析python中__name__ = "__main__"的作用
- python:浅析python 中__name__ = '__main__' 的作用
- python:浅析python 中__name__ = '__main__' 的作用
- Python __name__ == '__main__'的作用
- python __name__ == '__main__'的作用
- Python中__name__ == "__main__"语句的作用
- python中if __name__ == '__main__'的作用
- Python中if __name__ == '__main__'的作用
- Python中if __name__ == '__main__'的作用
- 统计难题——Trie树
- 使用PreparedStatement实现增删改查
- 怎样在main()函数退出之后再执行一段代码?
- xshell实现windows上传文件到linux
- 生成随机码
- Python 中 __name__ == '__main__' 的作用
- Safecracker
- 【ARM-Linux开发】【CUDA开发】【深度学习与神经网络】Jetson Tx2安装相关之二
- 360兼容
- ReactJS使用心得之轮播图
- Mybatis学习笔记之五:Mybatis3.X与Spring4.X的整合
- 窗体部件之QProgressBar
- textarea中限制输入字符长度(实用版)
- 【UE4学习】19_4.17 preview 1 尝鲜(快捷方式、打包、去黑边)