浅析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实现逻辑回归的方法示例
May 02 Python
python3解析库pyquery的深入讲解
Jun 26 Python
深入flask之异步非堵塞实现代码示例
Jul 31 Python
python实现Zabbix-API监控
Sep 17 Python
Python Flask 搭建微信小程序后台详解
May 06 Python
Apache,wsgi,django 程序部署配置方法详解
Jul 01 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
Sep 07 Python
Python实现新型冠状病毒传播模型及预测代码实例
Feb 05 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
Feb 28 Python
Python偏函数实现原理及应用
Nov 20 Python
利用python实现后端写网页(flask框架)
Feb 28 Python
python之django路由和视图案例教程
Jul 26 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网站的几个实用要点
2014/12/30 PHP
Thinkphp关闭缓存的方法
2015/06/26 PHP
详细解读PHP中接口的应用
2015/08/12 PHP
php实现的双色球算法示例
2017/06/20 PHP
利用js获取服务器时间的两个简单方法
2010/01/08 Javascript
JsDom 编程小结
2011/08/09 Javascript
JavaScript基础知识之数据类型
2012/08/06 Javascript
Json对象与Json字符串互转(4种转换方式)
2013/03/27 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
2016/05/13 Javascript
如何判断Javascript对象是否存在的简单实例
2016/05/18 Javascript
javascript学习之json入门
2016/12/22 Javascript
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
ES6新特性:使用export和import实现模块化详解
2017/07/31 Javascript
es6学习之解构时应该注意的点
2017/08/29 Javascript
详解vue表单——小白速看
2018/04/08 Javascript
详解如何在vue-cli中使用vuex
2018/08/07 Javascript
利用jqgrid实现上移下移单元格功能
2018/11/07 Javascript
Vue.js递归组件实现组织架构树和选人功能案例分析
2019/07/03 Javascript
小程序两种滚动公告栏的实现方法
2019/09/17 Javascript
vue滑动吸顶及锚点定位的示例代码
2020/05/10 Javascript
javascript操作向表格中动态加载数据
2020/08/27 Javascript
python操作sqlite的CRUD实例分析
2015/05/08 Python
Python快速排序算法实例分析
2017/11/29 Python
python爬取cnvd漏洞库信息的实例
2019/02/14 Python
python实现差分隐私Laplace机制详解
2019/11/25 Python
Python爬虫headers处理及网络超时问题解决方案
2020/06/19 Python
pycharm中使用request和Pytest进行接口测试的方法
2020/07/31 Python
浅谈css3中calc在less编译时被计算的解决办法
2017/12/04 HTML / CSS
Corelle官方网站:购买康宁餐具
2016/11/02 全球购物
英国经典球衣网站:Classic Football Shirts
2017/05/20 全球购物
全球性的在线鞋类品牌:Public Desire
2019/04/03 全球购物
Unix如何在一行中运行多个命令
2015/05/29 面试题
个人生活学习自我评价范文
2013/11/26 职场文书
幼儿园三八妇女节活动方案
2014/03/11 职场文书
2014年教师工作总结
2014/11/10 职场文书
2016同学毕业寄语大全
2015/12/04 职场文书