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使用7z解压apk包的方法
Apr 18 Python
python实现发送和获取手机短信验证码
Jan 15 Python
python 函数传参之传值还是传引用的分析
Sep 07 Python
python实现读取excel写入mysql的小工具详解
Nov 20 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
Feb 18 Python
对python requests的content和text方法的区别详解
Oct 11 Python
浅谈python中拼接路径os.path.join斜杠的问题
Oct 23 Python
Django中更改默认数据库为mysql的方法示例
Dec 05 Python
python实现三次样条插值
Dec 17 Python
python pandas库的安装和创建
Jan 10 Python
python修改文件内容的3种方法详解
Nov 15 Python
TensorFlow实现指数衰减学习率的方法
Feb 05 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
一个简易需要注册的留言版程序
2006/10/09 PHP
PHP面向对象之旅:深入理解static变量与方法
2014/01/06 PHP
php匹配字符中链接地址的方法
2014/12/22 PHP
PHP设计模式之装饰者模式代码实例
2015/05/11 PHP
PHP ajax 异步执行不等待执行结果的处理方法
2015/05/27 PHP
php7基于递归实现删除空文件夹的方法示例
2017/06/15 PHP
javascript 函数调用的对象和方法
2010/07/01 Javascript
javascript学习之闭包分析
2010/12/02 Javascript
jQuery学习总结之元素的相对定位和选择器(持续更新)
2011/04/26 Javascript
jquery中trigger()无法触发hover事件的解决方法
2015/05/07 Javascript
JavaScript中字符串拼接的基本方法
2015/07/07 Javascript
JS实现的自定义显示加载等待图片插件(loading.gif)
2016/06/17 Javascript
js实现精确到毫秒的倒计时效果
2016/08/05 Javascript
JavaScript基础——使用Canvas绘图
2016/11/02 Javascript
JS中实现函数return多个返回值的实例
2017/02/21 Javascript
浅谈JS如何实现真正的对象常量
2017/06/25 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
vue项目中jsonp跨域获取qq音乐首页推荐问题
2018/05/30 Javascript
[02:46]解说DC:感谢430陪伴我们的DOTA2国际邀请赛岁月
2016/06/29 DOTA
[01:11:32]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python脚本处理空格的方法
2016/08/08 Python
Python首次安装后运行报错(0xc000007b)的解决方法
2016/10/18 Python
Python加载带有注释的Json文件实例
2018/05/23 Python
python列表list保留顺序去重的实例
2018/12/14 Python
Python中dict和set的用法讲解
2019/03/28 Python
一篇文章搞定Python操作文件与目录
2019/08/13 Python
python3常用的数据清洗方法(小结)
2019/10/31 Python
PYQT5开启多个线程和窗口,多线程与多窗口的交互实例
2019/12/13 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
2020/07/14 Python
python语言实现贪吃蛇游戏
2020/11/13 Python
CSS3之2D与3D变换的实现方法
2019/01/28 HTML / CSS
2015毕业寄语大全
2015/02/26 职场文书
Nginx中break与last的区别详析
2021/03/31 Servers
js Proxy的原理详解
2021/05/25 Javascript
python字符串的多行输出的实例详解
2021/06/08 Python
python使用torch随机初始化参数
2022/03/22 Python