浅析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使用PIL缩放网络图片并保存的方法
Apr 24 Python
浅析Python中元祖、列表和字典的区别
Aug 17 Python
在Linux命令行终端中使用python的简单方法(推荐)
Jan 23 Python
Python实现数据库并行读取和写入实例
Jun 09 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
May 04 Python
使用pandas把某一列的字符值转换为数字的实例
Jan 29 Python
Python中的支持向量机SVM的使用(附实例代码)
Jun 26 Python
微信公众号token验证失败解决方案
Jul 22 Python
pygame实现烟雨蒙蒙下彩虹雨
Nov 11 Python
Python Celery多队列配置代码实例
Nov 22 Python
Django-imagekit的使用详解
Jul 06 Python
Python用户自定义异常的实现
Dec 25 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中支持多种编码的中文字符串截取函数!
2007/03/20 PHP
PHPMailer邮件发送的实现代码
2013/05/04 PHP
PHP基于socket实现客户端和服务端通讯功能
2017/07/13 PHP
PHP基于面向对象封装的分页类示例
2019/03/15 PHP
JavaScript 基础问答三
2008/12/03 Javascript
javascript创建数组之联合数组的使用方法示例
2013/12/26 Javascript
node.js中的http.request方法使用说明
2014/12/14 Javascript
微信小程序 Image API实例详解
2016/09/30 Javascript
js实现开启密码大写提示
2016/12/21 Javascript
vue实现单选和多选功能
2017/08/11 Javascript
微信小程序中post方法与get方法的封装
2017/09/26 Javascript
详解基于 Nuxt 的 Vue.js 服务端渲染实践
2017/10/24 Javascript
详解angularjs 学习之 scope作用域
2018/01/15 Javascript
详细分析JavaScript中的深浅拷贝
2020/09/17 Javascript
JavaScript实现商品评价五星好评
2020/11/30 Javascript
ES2020让代码更优美的运算符 (?.) (??)
2021/01/04 Javascript
[49:08]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python守护进程(daemon)代码实例
2015/03/06 Python
python超简单解决约瑟夫环问题
2015/05/12 Python
深入解析Python的Tornado框架中内置的模板引擎
2016/07/11 Python
python+pyqt实现右下角弹出框
2017/10/26 Python
用 Python 连接 MySQL 的几种方式详解
2018/04/04 Python
CSS3中box-shadow的用法介绍
2015/07/15 HTML / CSS
html5 touch事件实现页面上下滑动效果【附代码】
2016/03/10 HTML / CSS
美国知名的家庭连锁百货商店:Boscov’s
2017/07/27 全球购物
李维斯法国官网:Levi’s法国
2019/07/13 全球购物
精伦电子Java笔试题
2013/01/16 面试题
怎么处理XML的中文问题
2015/03/26 面试题
某公司的.net工程师面试题笔试题
2013/11/22 面试题
开办饭店创业计划书
2013/12/28 职场文书
俞敏洪励志演讲稿
2014/04/29 职场文书
捐款倡议书怎么写
2014/05/13 职场文书
微电影大赛策划方案
2014/06/05 职场文书
2014年护理工作总结范文
2014/11/14 职场文书
SqlServer 垂直分表(减少程序改动)
2021/04/16 SQL Server
R9700摩机记
2022/04/05 无线电