浅析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实现去除代码前行号的方法
Mar 10 Python
python非递归全排列实现方法
Apr 10 Python
python面向对象_详谈类的继承与方法的重载
Jun 07 Python
Django框架多表查询实例分析
Jul 04 Python
python 找出list中最大或者最小几个数的索引方法
Oct 30 Python
Python 实现子类获取父类的类成员方法
Jan 11 Python
通过PHP与Python代码对比的语法差异详解
Jul 10 Python
python使用rsa非对称加密过程解析
Dec 28 Python
解决Keras 中加入lambda层无法正常载入模型问题
Jun 16 Python
Django实现翻页的示例代码
May 24 Python
Python matplotlib可视化之绘制韦恩图
Feb 24 Python
pytorch中的torch.nn.Conv2d()函数图文详解
Feb 28 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中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
PHP图片等比例缩放生成缩略图函数分享
2014/06/10 PHP
CodeIgniter CLI模式简介
2014/06/17 PHP
多广告投放代码 推荐
2006/11/13 Javascript
use jscript with List Proxy Server Information
2007/06/11 Javascript
利用js获取服务器时间的两个简单方法
2010/01/08 Javascript
一个通过script自定义属性传递配置参数的方法
2014/09/15 Javascript
jQuery中map()方法用法实例
2015/01/06 Javascript
javascript面向对象程序设计高级特性经典教程(值得收藏)
2016/05/19 Javascript
JQuery动态添加Select的Option元素实现方法
2016/08/29 Javascript
angular ngClick阻止冒泡使用默认行为的方法
2016/11/03 Javascript
JavaScript中利用for循环遍历数组
2017/01/15 Javascript
JavaScript代码实现txt文件的上传预览功能
2018/03/27 Javascript
基于vue-simplemde实现图片拖拽、粘贴功能
2018/04/12 Javascript
发布Angular应用至生产环境的方法
2018/12/10 Javascript
详解jenkins自动化部署vue
2019/05/14 Javascript
React如何实现浏览器打印部分内容详析
2019/05/19 Javascript
解决layui table表单提示数据接口请求异常的问题
2019/09/24 Javascript
Vuex中实现数据状态查询与更改
2019/11/08 Javascript
OpenLayers实现图层切换控件
2020/09/25 Javascript
python+Django+apache的配置方法详解
2016/06/01 Python
python 与GO中操作slice,list的方式实例代码
2017/03/20 Python
使用python实现ANN
2017/12/20 Python
PyQt5+requests实现车票查询工具
2019/01/21 Python
Python判断telnet通不通的实例
2019/01/26 Python
基于pycharm实现批量修改变量名
2020/06/02 Python
鼠标滚轮事件和Mac触控板双指事件
2019/12/23 HTML / CSS
贝嫂喜欢的婴儿品牌,个性化的婴儿礼物:My 1st Years
2017/11/19 全球购物
给交警的表扬信
2014/01/12 职场文书
职业培训师职业生涯规划
2014/02/18 职场文书
国际贸易毕业生自荐书
2014/06/22 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
三方股东合作协议书
2014/10/28 职场文书
给老婆的保证书
2015/01/16 职场文书
2015年村计划生育工作总结
2015/04/28 职场文书
PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
2021/04/01 PHP