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 01 Python
Python基础练习之用户登录实现代码分享
Nov 08 Python
python 限制函数调用次数的实例讲解
Apr 21 Python
Python实现字典(dict)的迭代操作示例
Jun 05 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
Jan 15 Python
python 实现selenium断言和验证的方法
Feb 13 Python
python3+selenium自动化测试框架详解
Mar 17 Python
pytorch多进程加速及代码优化方法
Aug 19 Python
使用pth文件添加Python环境变量方式
May 26 Python
Win10下用Anaconda安装TensorFlow(图文教程)
Jun 18 Python
python 逐步回归算法
Apr 06 Python
python Tkinter的简单入门教程
Apr 11 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 字符串操作入门教程
2006/12/06 PHP
PHP 异步执行方法,模拟多线程的应用分析
2013/06/03 PHP
使用GD库生成带阴影文字的图片
2015/03/27 PHP
在WordPress中实现发送http请求的相关函数解析
2015/12/29 PHP
php简单实现短网址(短链)还原的方法(测试可用)
2016/05/09 PHP
什么是PHP文件?如何打开PHP文件?
2017/06/27 PHP
PHP使用redis位图bitMap 实现签到功能
2019/10/08 PHP
JavaScript中SQL语句的应用实现
2010/05/04 Javascript
sliderToggle在写jquery的计时器setTimeouter中不生效
2014/05/26 Javascript
javascript获取隐藏元素(display:none)的高度和宽度的方法
2014/06/06 Javascript
jQuery实现鼠标选文字发新浪微博的方法
2016/04/02 Javascript
JavaScript 基础函数_深入剖析变量和作用域
2016/05/18 Javascript
AngularJS中的表单简单入门
2016/07/28 Javascript
遍历js中对象的属性和值的实例
2016/11/21 Javascript
js 中rewrap-ajax.js插件实例代码
2017/10/20 Javascript
微信小程序之swiper滑动面板用法示例
2018/12/04 Javascript
基于vue实现探探滑动组件功能
2020/05/29 Javascript
[01:36:19]Secret vs NB 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
ubuntu环境下python虚拟环境的安装过程
2018/01/07 Python
python使用Tkinter实现在线音乐播放器
2018/01/30 Python
python实现Adapter模式实例代码
2018/02/09 Python
matplotlib savefig 保存图片大小的实例
2018/05/24 Python
Python实现的redis分布式锁功能示例
2018/05/29 Python
Python实现的远程文件自动打包并下载功能示例
2019/07/12 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
2020/03/20 Python
Django实现后台上传并显示图片功能
2020/05/29 Python
python 实现的车牌识别项目
2021/01/25 Python
html5的画布canvas——画出简单的矩形、三角形实例代码
2013/06/09 HTML / CSS
澳大利亚礼品篮网站:Macarthur Baskets
2019/10/14 全球购物
人力资源部门的主要职能
2014/02/22 职场文书
大学班级文化建设方案
2014/05/06 职场文书
2014党委书记四风问题对照检查材料思想汇报
2014/09/22 职场文书
高校师德师风自我剖析材料
2014/09/29 职场文书
三八红旗手主要事迹材料
2015/11/04 职场文书
幼儿园2016圣诞节活动总结
2016/03/31 职场文书
2019年汽车租赁合同范本!
2019/08/12 职场文书