浅析python 中__name__ = '__main__' 的作用


Posted in Python onJuly 05, 2014

很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = '__main__' 的作用,到底干嘛的?

有句话经典的概括了这段代码的意义:

“Make a script both importable and executable”

意思就是说让你写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行

这句话,可能一开始听的还不是很懂。下面举例说明:

先写一个模块:

#module.py
def main():
  print "we are in %s"%__name__
if __name__ == '__main__':
  main()

这个函数定义了一个main函数,我们执行一下该py文件发现结果是打印出”we are in __main__“,说明我们的if语句中的内容被执行了,调用了main():

但是如果我们从另我一个模块导入该模块,并调用一次main()函数会是怎样的结果呢?

#anothermodle.py
from module import main
main()

其执行的结果是:we are in module

但是没有显示”we are in __main__“,也就是说模块__name__ = '__main__' 下面的函数没有执行。

这样既可以让“模块”文件运行,也可以被其他模块引入,而且不会执行函数2次。这才是关键。

总结一下:

如果我们是直接执行某个.py文件的时候,该文件中那么”__name__ == '__main__'“是True,但是我们如果从另外一个.py文件通过import导入该文件的时候,这时__name__的值就是我们这个py文件的名字而不是__main__。

这个功能还有一个用处:调试代码的时候,在”if __name__ == '__main__'“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行!

Python 相关文章推荐
使用Python下载Bing图片(代码)
Nov 07 Python
python中as用法实例分析
Apr 30 Python
python编码最佳实践之总结
Feb 14 Python
python 通过xml获取测试节点和属性的实例
Mar 31 Python
Python使用numpy模块创建数组操作示例
Jun 20 Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
May 03 Python
python中多个装饰器的调用顺序详解
Jul 16 Python
python不到50行代码完成了多张excel合并的实现示例
May 28 Python
django 获取字段最大值,最新的记录操作
Aug 09 Python
python3.9实现pyinstaller打包python文件成exe
Dec 13 Python
python字符串的多行输出的实例详解
Jun 08 Python
Python socket如何解析HTTP请求内容
Feb 12 Python
python在windows下实现备份程序实例
Jul 04 #Python
python调用短信猫控件实现发短信功能实例
Jul 04 #Python
Python实现类继承实例
Jul 04 #Python
Django集成百度富文本编辑器uEditor攻略
Jul 04 #Python
一个小示例告诉你Python语言的优雅之处
Jul 04 #Python
教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
Jul 04 #Python
Python Deque 模块使用详解
Jul 04 #Python
You might like
php中将时间差转换为字符串提示的实现代码
2011/08/08 PHP
php empty()与isset()区别的详细介绍
2013/06/17 PHP
PHP数组相关函数汇总
2015/03/24 PHP
php自定义函数实现汉字转换utf8编码的方法
2016/09/29 PHP
PHP设计模式之观察者模式定义与用法示例
2018/08/04 PHP
javascript 数组学习资料收集
2010/04/11 Javascript
高效的表格行背景隔行变色及选定高亮的JS代码
2010/12/04 Javascript
淘宝搜索框效果实现分析
2011/03/05 Javascript
使用jquery为table动态添加行的实现代码
2011/03/30 Javascript
JavaScript中数组对象的那些自带方法介绍
2013/03/12 Javascript
js判断字符长度以及中英文数字等
2013/12/31 Javascript
一个Action如何调用两个不同的方法
2014/05/22 Javascript
javascript格式化json显示实例分析
2015/04/21 Javascript
Vue拖拽组件开发实例详解
2018/05/11 Javascript
JS实现select选中option触发事件操作示例
2018/07/13 Javascript
vuex提交state&&实时监听state数据的改变方法
2018/09/16 Javascript
node.js调用C++函数的方法示例
2018/09/21 Javascript
详解JavaScript中的坐标和距离
2019/05/27 Javascript
图解javascript作用域链
2019/05/27 Javascript
javascript实现函数柯里化与反柯里化过程解析
2019/10/08 Javascript
node.js制作一个简单的登录拦截器
2020/02/10 Javascript
js定时器出现第一次延迟的原因及解决方法
2021/01/04 Javascript
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
python 实现简单的FTP程序
2019/12/27 Python
Python如何将函数值赋给变量
2020/04/28 Python
keras自动编码器实现系列之卷积自动编码器操作
2020/07/03 Python
全球速卖通西班牙站:AliExpress西班牙
2017/10/30 全球购物
初中英语教学反思
2014/01/25 职场文书
青年文明号创建承诺
2014/03/31 职场文书
特教教师先进事迹
2014/05/21 职场文书
2014年小学英语教师工作总
2014/12/03 职场文书
毕业生学校组织意见
2015/06/04 职场文书
会议室使用管理制度
2015/08/06 职场文书
详解Python牛顿插值法
2021/05/11 Python
关于@OnetoMany关系映射的排序问题,使用注解@OrderBy
2021/12/06 Java/Android