浅析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刷投票的脚本实现代码
Nov 08 Python
Python两个内置函数 locals 和globals(学习笔记)
Aug 28 Python
详解Python多线程
Nov 14 Python
Python实现利用163邮箱远程关电脑脚本
Feb 22 Python
Python OS模块实例详解
Apr 15 Python
Python多线程threading模块用法实例分析
May 22 Python
python自动发邮件总结及实例说明【推荐】
May 31 Python
Python 串口读写的实现方法
Jun 12 Python
浅谈Python_Openpyxl使用(最全总结)
Sep 05 Python
python中web框架的自定义创建
Sep 08 Python
python 异步async库的使用说明
May 04 Python
Python机器学习之PCA降维算法详解
May 19 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
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
2009/04/24 PHP
详解PHP中的状态模式编程
2015/08/11 PHP
详解WordPress开发中get_header()获取头部函数的用法
2016/01/08 PHP
PHP基于自增数据如何生成不重复的随机数示例
2017/05/19 PHP
PHP程序守护进程化实现方法详解
2020/07/16 PHP
php的lavarel框架中join和orWhere的用法
2020/12/28 PHP
些很实用且必用的小脚本代码
2006/06/26 Javascript
精解window.setTimeout()&window.setInterval()使用方式与参数传递问题!
2007/11/23 Javascript
关于javascript中的parseInt使用技巧
2009/09/03 Javascript
起点页面传值js,有空研究学习下
2010/01/25 Javascript
jQuery 源码分析笔记(7) Queue
2011/06/19 Javascript
Webkit的跨域安全问题说明
2011/09/13 Javascript
script标签属性type与language使用选择
2012/12/02 Javascript
js(jQuery)获取时间的方法及常用时间类搜集
2013/10/23 Javascript
jQuery实现鼠标划过展示大图的方法
2015/03/09 Javascript
深入理解JavaScript编程中的同步与异步机制
2015/06/24 Javascript
谈谈JavaScript类型系统之Math
2016/01/06 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
2016/06/27 Javascript
微信公众号 客服接口的开发实例详解
2016/09/28 Javascript
基于jQuery选择器之表单对象属性筛选选择器的实例
2017/09/19 jQuery
JS实现字符串中去除指定子字符串方法分析
2018/05/17 Javascript
element-ui表格列金额显示两位小数的方法
2018/08/24 Javascript
对node通过fs模块判断文件是否是文件夹的实例讲解
2019/06/10 Javascript
vue实现百度搜索功能
2020/12/28 Javascript
jQuery实现日历效果
2020/09/11 jQuery
微信小程序实现首页弹出广告
2020/12/03 Javascript
Python使用正则表达式获取网页中所需要的信息
2018/01/29 Python
Django学习教程之静态文件的调用详解
2018/05/08 Python
Python3实现定时任务的四种方式
2019/06/03 Python
python自动化实现登录获取图片验证码功能
2019/11/20 Python
大四本科生的自我评价
2013/12/30 职场文书
水果连锁超市创业计划书
2014/01/24 职场文书
荷叶母亲教学反思
2014/04/30 职场文书
个人批评与自我批评发言稿
2014/09/28 职场文书
2015年工程师工作总结
2015/04/30 职场文书
“爱眼护眼,提前预防近视”倡议书3篇
2019/10/30 职场文书