浅析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实现博客上进行自动翻页
Aug 23 Python
详解Python进程间通信之命名管道
Aug 28 Python
python登录并爬取淘宝信息代码示例
Dec 09 Python
对numpy中布尔型数组的处理方法详解
Apr 17 Python
python scipy求解非线性方程的方法(fsolve/root)
Nov 12 Python
Pandas库之DataFrame使用的学习笔记
Jun 21 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
Jun 21 Python
opencv调整图像亮度对比度的示例代码
Sep 27 Python
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
May 25 Python
Python Opencv实现单目标检测的示例代码
Sep 08 Python
Python操作word文档插入图片和表格的实例演示
Oct 25 Python
详解Go语言运用广度优先搜索走迷宫
Jun 23 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下判断数组中是否存在相同的值array_unique
2008/03/25 PHP
php 攻击方法之谈php+mysql注射语句构造
2009/10/30 PHP
php 文件上传实例代码
2012/04/19 PHP
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
php实现Session存储到Redis
2015/11/11 PHP
PHP框架Laravel插件Pagination实现自定义分页
2020/04/22 PHP
php用户密码加密算法分析【Discuz加密算法】
2016/10/12 PHP
Laravel框架实现抢红包功能示例
2019/10/31 PHP
基于jquery的气泡提示效果
2010/05/31 Javascript
JavaScript动态改变表格单元格内容的方法
2015/03/30 Javascript
通过js获取上传的图片信息(临时保存路径,名称,大小)然后通过ajax传递给后端的方法
2015/10/01 Javascript
javascript如何实现360度全景照片问题汇总
2016/04/04 Javascript
Vue异步加载about组件
2017/10/31 Javascript
基于express中路由规则及获取请求参数的方法
2018/03/12 Javascript
vue-baidu-map 进入页面自动定位的解决方案(推荐)
2018/04/28 Javascript
js+css实现红包雨效果
2018/07/12 Javascript
vue实现分页组件
2020/06/16 Javascript
node+multer实现图片上传的示例代码
2020/02/18 Javascript
在Vue 中获取下拉框的文本及选项值操作
2020/08/13 Javascript
JS sort排序详细使用方法示例解析
2020/09/27 Javascript
JS实现简单贪吃蛇小游戏
2020/10/28 Javascript
[54:25]Ti4 循环赛第三日LGD vs MOUZ
2014/07/12 DOTA
[02:29]大剑、皮鞭、女装,这届DOTA2勇士令状里都有
2020/07/17 DOTA
python自动格式化json文件的方法
2015/03/11 Python
TensorFlow数据输入的方法示例
2018/06/19 Python
Django数据库类库MySQLdb使用详解
2019/04/28 Python
Python倒排索引之查找包含某主题或单词的文件
2019/11/13 Python
Python字符串格式化输出代码实例
2019/11/22 Python
用HTML5.0制作网页的教程
2010/05/30 HTML / CSS
亚马逊加拿大网站:Amazon.ca
2020/01/06 全球购物
教师网络培训感言
2014/03/09 职场文书
调研汇报材料范文
2014/08/17 职场文书
运动会广播稿诗歌版
2014/09/12 职场文书
2015新生加入学生会自荐书
2015/03/24 职场文书
2015迎新晚会开场白
2015/07/17 职场文书
Redis遍历所有key的两个命令(KEYS 和 SCAN)
2021/04/12 Redis