浅析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多线程用法实例详解
Jan 15 Python
pip matplotlib报错equired packages can not be built解决
Jan 06 Python
Python实现PS图像调整之对比度调整功能示例
Jan 26 Python
python MNIST手写识别数据调用API的方法
Aug 08 Python
浅谈python下含中文字符串正则表达式的编码问题
Dec 07 Python
Django实现学员管理系统
Feb 26 Python
python的几种矩阵相乘的公式详解
Jul 10 Python
通过实例学习Python Excel操作
Jan 06 Python
Python转换itertools.chain对象为数组的方法
Feb 07 Python
OpenCV 表盘指针自动读数的示例代码
Apr 10 Python
浅谈Python里面None True False之间的区别
Jul 09 Python
Python Flask搭建yolov3目标检测系统详解流程
Nov 07 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
CI框架安全类Security.php源码分析
2014/11/04 PHP
本地对象Array的原型扩展实现代码
2010/12/04 Javascript
jQuery EasyUI API 中文文档 - ProgressBar 进度条
2011/09/29 Javascript
Javascript基础教程之比较操作符
2015/01/18 Javascript
javascript实现炫酷的拖动分页
2015/05/11 Javascript
javascript 定时器工作原理分析
2016/12/03 Javascript
jQuery基于ajax操作json数据简单示例
2017/01/05 Javascript
jquery实现多次上传同一张图片
2017/01/09 Javascript
vue-router实现webApp切换页面动画效果代码
2017/05/25 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
详解自定义ajax支持跨域组件封装
2018/02/08 Javascript
Mint UI实现A-Z字母排序的城市选择列表
2018/12/28 Javascript
浅谈js闭包理解
2019/04/01 Javascript
vue子传父关于.sync与$emit的实现
2019/11/05 Javascript
解决微信小程序scroll-view组件无横向滚动的问题
2020/02/04 Javascript
创建与框架无关的JavaScript插件
2020/12/01 Javascript
[03:52]显微镜下的DOTA2第三期——英雄在无聊的时候干什么
2014/06/20 DOTA
Python中统计函数运行耗时的方法
2015/05/05 Python
Python编程实现微信企业号文本消息推送功能示例
2017/08/21 Python
Django中Middleware中的函数详解
2019/07/18 Python
Django 创建后台,配置sqlite3教程
2019/11/18 Python
pytorch-RNN进行回归曲线预测方式
2020/01/14 Python
美国糖果店:Sugarfina
2019/02/21 全球购物
联想阿根廷官方网站:Lenovo Argentina
2019/10/14 全球购物
英国领先的在线高尔夫商店:Gamola Golf
2019/11/16 全球购物
药学专业毕业生求职信
2013/10/20 职场文书
酒店管理专业毕业生推荐信
2013/11/10 职场文书
商务英语大学生职业生涯规划书范文
2014/01/01 职场文书
学校党的群众路线教育实践活动总结报告
2014/07/03 职场文书
杨善洲观后感
2015/06/04 职场文书
百万英镑观后感
2015/06/09 职场文书
导盲犬小Q观后感
2015/06/11 职场文书
2016优秀护士先进个人事迹材料
2016/02/25 职场文书
2016年小学端午节活动总结
2016/04/01 职场文书
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
2021/05/06 MySQL
sql时间段切分实现每隔x分钟出一份高速门架车流量
2022/02/28 SQL Server