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中的函数用法入门教程
Sep 02 Python
Python实现字符串反转的常用方法分析【4种方法】
Sep 30 Python
解决csv.writer写入文件有多余的空行问题
Jul 06 Python
Python 字符串转换为整形和浮点类型的方法
Jul 17 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
Feb 01 Python
python生成带有表格的图片实例
Feb 03 Python
Python数据类型之Number数字操作实例详解
May 08 Python
python多线程同步之文件读写控制
Feb 25 Python
Python zip函数打包元素实例解析
Dec 11 Python
Python如何避免文件同名产生覆盖
Jun 09 Python
python的help函数如何使用
Jun 11 Python
OpenCV3.3+Python3.6实现图片高斯模糊
May 18 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
PHP抽象类 介绍
2012/06/13 PHP
destoon复制新模块的方法
2014/06/21 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
2015/08/25 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
2015/12/25 PHP
非常经典的PHP文件上传类分享
2016/05/15 PHP
Yii框架分页技术实例分析
2019/08/30 PHP
短信提示使用 特效
2007/01/19 Javascript
js 编写规范
2010/03/03 Javascript
JQuery学习笔记 nt-child的使用
2011/01/17 Javascript
分享20多个很棒的jQuery 文件上传插件或教程
2011/09/04 Javascript
使用console进行性能测试
2015/04/27 Javascript
不定义JQuery插件 不要说会JQuery
2016/03/07 Javascript
在AngularJS中使用jQuery的zTree插件的方法
2016/04/21 Javascript
基于jQuery实现表格的查看修改删除
2016/08/01 Javascript
浅谈JS之iframe中的窗口
2016/09/13 Javascript
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
2018/07/31 NodeJs
浅谈vue同一页面中拥有两个表单时,的验证问题
2018/09/18 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
2018/09/21 Javascript
JS实现带阴历的日历功能详解
2019/01/24 Javascript
jQuery实现的隔行变色功能【案例】
2019/02/18 jQuery
ES6基础之展开语法(Spread syntax)
2019/02/21 Javascript
vue router 通过路由来实现切换头部标题功能
2019/04/24 Javascript
vue中created和mounted的区别浅析
2019/08/13 Javascript
JavaScript实现H5接金币功能(实例代码)
2021/02/22 Javascript
[02:41]DOTA2英雄基础教程 谜团
2013/12/10 DOTA
[01:09:23]KG vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
2020/01/06 Python
Keras SGD 随机梯度下降优化器参数设置方式
2020/06/19 Python
零基础学python应该从哪里入手
2020/08/11 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
2020/11/17 Python
eBay德国站:eBay.de
2017/09/14 全球购物
英国天然宝石首饰购买网站:Gemondo Jewellery
2018/10/23 全球购物
文员岗位职责范本
2014/03/08 职场文书
创先争优标语
2014/06/27 职场文书
村党支部书记四风问题个人对照检查材料思想汇报
2014/10/06 职场文书
30岁前绝不能错过的10本书
2019/08/08 职场文书