Python contextlib模块使用示例


Posted in Python onFebruary 18, 2015

看这个模块要先看with as的用法,最常用的方法就是打开一个文件:

with open(“filename”) as f:

f.read()

with可以调用一个上下文管理器,产生运行时的上下文环境。上下文管理器主要定义两个方法,__enter__,__exit__。__enter__返回上下文里操作的对象,如f。__exit__是销毁对象和异常处理。

contextlib模块对外有三个接口,
contextmanager装饰器,装饰的函数必须是一个生成器。然后返回一个函数,在函数调用的时候返回一个上下文管理器。

nested为了一次调用多个上下文管理器的时候用,将所有上下文管理器里的__enter__放到vars里,一次yield返回,然后unpack。就产生多个对象了。__exit__都放到exits列表里,在finally里统一调用,这些__exit__在调用上下文管理器产生异常时,如何处理。如果返回false,将会把异常继续抛出,返回true则不会抛出异常。

closing,这个用过,没想到的是竟然是个类,而不是个函数。就是把有close方法却没有__exit__方法的对象变成一个上下文管理器。代码很简单:

class closing(object):

    def __init__(self, thing):

        self.thing = thing

    def __enter__(self):

        return self.thing

    def __exit__(self, *exc_info):

        self.thing.close()
Python 相关文章推荐
Python中关于Sequence切片的下标问题详解
Jun 15 Python
python实现的二叉树定义与遍历算法实例
Jun 30 Python
Python通过matplotlib画双层饼图及环形图简单示例
Dec 15 Python
python深度优先搜索和广度优先搜索
Feb 07 Python
利用python将pdf输出为txt的实例讲解
Apr 23 Python
实例详解Python模块decimal
Jun 26 Python
python 输出列表元素实例(以空格/逗号为分隔符)
Dec 25 Python
Pycharm最新激活码2019(推荐)
Dec 31 Python
Python for循环通过序列索引迭代过程解析
Feb 07 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
Apr 23 Python
OpenCV图片漫画效果的实现示例
Aug 18 Python
详解matplotlib绘图样式(style)初探
Feb 03 Python
Python中使用Inotify监控文件实例
Feb 14 #Python
Python中实现的RC4算法
Feb 14 #Python
Python脚本实现网卡流量监控
Feb 14 #Python
Centos5.x下升级python到python2.7版本教程
Feb 14 #Python
Python脚本实现DNSPod DNS动态解析域名
Feb 14 #Python
Python压缩和解压缩zip文件
Feb 14 #Python
Python简单日志处理类分享
Feb 14 #Python
You might like
Apache下禁止php文件被直接访问的解决方案
2013/04/25 PHP
thinkphp实现like模糊查询实例
2014/10/29 PHP
Yii调试查看执行SQL语句的方法
2016/07/15 PHP
php基于curl主动推送最新内容给百度收录的方法
2016/10/14 PHP
通用JS事件写法实现代码
2009/01/07 Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
2013/11/28 Javascript
js与jquery获取父元素,删除子元素的两种不同方法
2014/01/09 Javascript
jquery bind(click)传参让列表中每行绑定一个事件
2014/08/06 Javascript
form表单转Json提交的方法(推荐)
2016/09/23 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
js点击任意区域弹出层消失实现代码
2016/12/27 Javascript
ES6入门教程之Iterator与for...of循环详解
2017/05/17 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
2017/08/19 Javascript
图文详解vue框架安装步骤
2019/02/12 Javascript
Node.js动手撸一个静态资源服务器的方法
2019/03/09 Javascript
[12:21]VICI vs TNC (BO3)
2018/06/07 DOTA
[01:27:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第一场 1月24日
2021/03/11 DOTA
Python使用正则表达式抓取网页图片的方法示例
2017/04/21 Python
python utc datetime转换为时间戳的方法
2019/01/15 Python
Python jieba库用法及实例解析
2019/11/04 Python
centos7中安装python3.6.4的教程
2019/12/11 Python
python pymysql库的常用操作
2020/10/16 Python
pycharm配置QtDesigner的超详细方法
2021/01/25 Python
饿了么订餐官网:外卖、网上订餐
2019/06/28 全球购物
教师推荐信范文
2013/11/24 职场文书
班班通项目实施方案
2014/02/25 职场文书
《春晓》教学反思
2014/04/20 职场文书
职工小家建设活动方案
2014/08/25 职场文书
人才市场接收函
2015/01/30 职场文书
小学端午节活动总结
2015/02/11 职场文书
2015年度工程师评职称工作总结
2015/10/14 职场文书
mysql优化
2021/04/06 MySQL
用Python创建简易网站图文教程
2021/06/11 Python
MySQL创建管理KEY分区
2022/04/13 MySQL
Python保存并浏览用户的历史记录
2022/04/29 Python