浅析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 相关文章推荐
50行代码实现贪吃蛇(具体思路及代码)
Apr 27 Python
Python中的模块和包概念介绍
Apr 13 Python
Python中基础的socket编程实战攻略
Jun 01 Python
对pandas中apply函数的用法详解
Apr 10 Python
Python Pandas找到缺失值的位置方法
Apr 12 Python
python实现对文件中图片生成带标签的txt文件方法
Apr 27 Python
Python爬虫解析网页的4种方式实例及原理解析
Dec 30 Python
Python语法之精妙的十个知识点(装B语法)
Jan 18 Python
深入了解python列表(LIST)
Jun 08 Python
几款Python编译器比较与推荐(小结)
Oct 15 Python
python中pow函数用法及功能说明
Dec 04 Python
深入理解python协程
Jun 15 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 socket实现的聊天室代码分享
2014/08/16 PHP
PHP中feof()函数实例测试
2014/08/23 PHP
php版微信自动获取收货地址api用法示例
2016/09/22 PHP
JavaScript 打地鼠游戏代码说明
2010/10/12 Javascript
JS非Alert实现网页右下角“未读信息”效果弹窗
2015/09/26 Javascript
深入理解jQuery.data() 的实现方式
2016/11/30 Javascript
jQuery Tree Multiselect使用详解
2017/05/02 jQuery
Angular指令之restict匹配模式的详解
2017/07/27 Javascript
使用Electron构建React+Webpack桌面应用的方法
2017/12/15 Javascript
Vue+SpringBoot开发V部落博客管理平台
2017/12/27 Javascript
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
2019/01/09 Javascript
Bootstarp在pycharm中的安装及简单的使用方法
2019/04/19 Javascript
vue.js中导出Excel表格的案例分析
2019/06/11 Javascript
nodejs二进制与Buffer的介绍与使用
2019/07/11 NodeJs
Vue在chrome44偶现点击子元素事件无法冒泡的解决方法
2019/12/15 Javascript
vue实现购物车结算功能
2020/06/18 Javascript
解决vuecli3中img src 的引入问题
2020/08/04 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
[08:42]DOTA2每周TOP10 精彩击杀集锦vol.2
2014/06/25 DOTA
[00:10]神之谴戒
2019/03/06 DOTA
python selenium实现发送带附件的邮件代码实例
2019/12/10 Python
Keras在训练期间可视化训练误差和测试误差实例
2020/06/16 Python
css3个性化字体_动力节点Java学院整理
2017/07/12 HTML / CSS
IE滤镜与CSS3效果(详细整理分享)
2013/01/25 HTML / CSS
canvas 基础之图像处理的使用
2020/04/10 HTML / CSS
TecoBuy澳大利亚:在线电子和小工具商店
2020/06/25 全球购物
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
UDP协议功能
2013/01/06 面试题
RIP版本1跟版本2的区别
2013/12/30 面试题
机电职业生涯规划书范文
2014/03/08 职场文书
2014年财务个人工作总结
2014/12/08 职场文书
第28个世界无烟日活动总结
2015/02/10 职场文书
青岛海底世界导游词
2015/02/11 职场文书
工程主管竞聘书
2015/09/15 职场文书
二手手机买卖合同范本(2019年版)
2019/10/28 职场文书
如何优化vue打包文件过大
2022/04/13 Vue.js