浅析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基础教程之python消息摘要算法使用示例
Feb 10 Python
利用Python的装饰器解决Bottle框架中用户验证问题
Apr 24 Python
Python模块包中__init__.py文件功能分析
Jun 14 Python
Python使用smtp和pop简单收发邮件完整实例
Jan 09 Python
Python多线程扫描端口代码示例
Feb 09 Python
python3.5 email实现发送邮件功能
May 22 Python
Sanic框架路由用法实例分析
Jul 16 Python
使用Python实现微信提醒备忘录功能
Dec 04 Python
python3 assert 断言的使用详解 (区别于python2)
Nov 27 Python
python Qt5实现窗体跟踪鼠标移动
Dec 13 Python
了解一下python内建模块collections
Sep 07 Python
Python实现提取PDF简历信息并存入Excel
Apr 02 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
层叠菜单的动态生成
2006/10/09 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
2020/08/24 PHP
xmlHTTP实例
2006/10/24 Javascript
html数组字符串拼接的最快方法
2009/09/16 Javascript
JS判断不同分辨率调用不同的CSS样式文件实现思路及测试代码
2013/01/23 Javascript
jQuery动态改变图片显示大小(修改版)的实现思路及代码
2013/12/24 Javascript
jQuery中hide()方法用法实例
2014/12/24 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
Javascript 实现全屏滚动实例代码
2016/12/31 Javascript
微信小程序 input输入框详解及简单实例
2017/01/10 Javascript
vue-resource + json-server模拟数据的方法
2017/11/02 Javascript
对angularJs中2种自定义服务的实例讲解
2018/09/30 Javascript
Angular脚手架开发的实现步骤
2019/04/09 Javascript
Node.js实现用户评论社区功能(体验前后端开发的乐趣)
2019/05/09 Javascript
[01:06]DOTA2亚洲邀请赛专属珍藏-荧煌之礼
2017/03/24 DOTA
python实现带验证码网站的自动登陆实现代码
2015/01/12 Python
Python数据类型详解(三)元祖:tuple
2016/05/08 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
Python常用库推荐
2016/12/04 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
2017/07/25 Python
python简单实例训练(21~30)
2017/11/15 Python
Pytorch Tensor基本数学运算详解
2019/12/30 Python
django之导入并执行自定义的函数模块图解
2020/04/01 Python
Python unittest如何生成HTMLTestRunner模块
2020/09/08 Python
python 爬取小说并下载的示例
2020/12/07 Python
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
2016/03/27 面试题
计算机工程学院个人求职信
2013/10/05 职场文书
财务人员求职自荐书范文
2014/02/10 职场文书
高一学生评语大全
2014/04/25 职场文书
促销活动总结范文
2014/04/30 职场文书
2015年党员创先争优公开承诺书
2015/04/27 职场文书
党支部半年考察意见
2015/06/01 职场文书
黄河绝恋观后感
2015/06/08 职场文书
寒假致家长的一封信
2015/10/10 职场文书
Redis可视化客户端小结
2021/06/10 Redis
vue选项卡切换的实现案例
2022/04/11 Vue.js