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 相关文章推荐
下载安装setuptool和pip linux安装pip    
Jan 24 Python
python控制台显示时钟的示例
Feb 24 Python
Python中datetime常用时间处理方法
Jun 15 Python
python3 shelve模块的详解
Jul 08 Python
基于使用paramiko执行远程linux主机命令(详解)
Oct 16 Python
python写一个md5解密器示例
Feb 23 Python
Python装饰器的执行过程实例分析
Jun 04 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 27 Python
利用Python将文本中的中英文分离方法
Oct 31 Python
Pytorch 实现自定义参数层的例子
Aug 17 Python
python seaborn heatmap可视化相关性矩阵实例
Jun 03 Python
Python调用腾讯API实现人脸身份证比对功能
Apr 04 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编程过程中需要了解的this,self,parent的区别
2009/12/30 PHP
解析PHP 5.5 新特性
2013/07/02 PHP
php数组删除元素示例
2014/03/21 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
基于JQuery的动态删除Table表格的行和列的代码
2011/05/12 Javascript
js跳转页面方法总结
2014/01/29 Javascript
jquery无刷新验证邮箱地址实现实例
2014/02/19 Javascript
js面向对象之静态方法和静态属性实例分析
2015/01/10 Javascript
JavaScript中window.open用法实例详解
2015/04/15 Javascript
jquery+CSS3模拟Path2.0动画菜单效果代码
2015/08/31 Javascript
JavaScript兼容浏览器FF/IE技巧
2016/08/14 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
2016/09/09 Javascript
vue实现todolist单页面应用
2017/04/11 Javascript
JS小球抛物线轨迹运动的两种实现方法详解
2017/12/20 Javascript
详解使用jest对vue项目进行单元测试
2018/09/07 Javascript
基于three.js实现的3D粒子动效实例代码
2019/04/09 Javascript
vscode 插件开发 + vue的操作方法
2020/06/05 Javascript
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
Python 中包/模块的 `import` 操作代码
2019/04/22 Python
python调用Matplotlib绘制分布点图
2019/10/18 Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
2020/06/01 Python
Python如何优雅删除字符列表空字符及None元素
2020/06/25 Python
Python下划线5种含义代码实例解析
2020/07/10 Python
通过案例解析python鸭子类型相关原理
2020/10/10 Python
python自动化办公操作PPT的实现
2021/02/05 Python
python的scipy.stats模块中正态分布常用函数总结
2021/02/19 Python
css3实现一个div设置多张背景图片及background-image属性实例演示
2017/08/10 HTML / CSS
css3利用transform变形结合事件完成扇形导航
2020/10/26 HTML / CSS
英国汽车零件购物网站:GSF Car Parts
2019/05/23 全球购物
Hawes & Curtis官网:英国经典品牌
2019/07/27 全球购物
学习雷锋活动总结
2014/04/29 职场文书
2014年社区计生工作总结
2014/11/18 职场文书
求职自荐信怎么写
2015/03/04 职场文书
2015年个人实习工作总结
2015/05/28 职场文书
会议营销主持词
2015/07/03 职场文书
董事长开业致辞
2015/07/29 职场文书