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中查看变量内存地址的方法
May 05 Python
Django中日期处理注意事项与自定义时间格式转换详解
Aug 06 Python
使用Django2快速开发Web项目的详细步骤
Jan 06 Python
Python Matplotlib实现三维数据的散点图绘制
Mar 19 Python
python设计tcp数据包协议类的例子
Jul 23 Python
python调用Matplotlib绘制分布点图
Oct 18 Python
django多种支付、并发订单处理实例代码
Dec 13 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
Apr 22 Python
Python使用for生成列表实现过程解析
Sep 22 Python
Python实现我的世界小游戏源代码
Mar 02 Python
如何使用Python对NetCDF数据做空间相关分析
Apr 21 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编码规范之注释和文件结构说明
2010/07/09 PHP
Could not load type System.ServiceModel.Activation.HttpModule解决办法
2012/12/29 PHP
jquery下json数组的操作实现代码
2010/08/09 Javascript
有关于JS辅助函数inherit()的问题
2013/04/07 Javascript
select、radio表单回显功能实现避免使用jquery载入赋值
2013/06/08 Javascript
Jquery响应回车键直接提交表单操作代码
2014/07/25 Javascript
Validform表单验证总结篇
2016/10/31 Javascript
微信小程序 textarea 详解及简单使用方法
2016/12/05 Javascript
详解Windows下安装Nodejs步骤
2017/05/18 NodeJs
基于Vue实例对象的数据选项
2017/08/09 Javascript
微信小程序页面渲染实现方法
2019/11/06 Javascript
微信小程序自定义弹出层效果
2020/05/26 Javascript
Python  __getattr__与__setattr__使用方法
2008/09/06 Python
python使用paramiko模块实现ssh远程登陆上传文件并执行
2014/01/27 Python
Python 制作糗事百科爬虫实例
2016/09/22 Python
Python实现Mysql数据库连接池实例详解
2017/04/11 Python
详解python eval函数的妙用
2017/11/16 Python
python读取Excel实例详解
2018/08/17 Python
Python爬取知乎图片代码实现解析
2019/09/17 Python
Python解析多帧dicom数据详解
2020/01/13 Python
Python urllib2运行过程原理解析
2020/06/04 Python
Python爬取股票信息,并可视化数据的示例
2020/09/26 Python
css3中仿放大镜效果的几种方式原理解析
2020/12/03 HTML / CSS
HTML5边玩边学(1)画布实现方法
2010/09/21 HTML / CSS
北美三大旅游网站之一:Travelocity加拿大
2016/08/20 全球购物
公共汽车、火车和飞机票的通用在线预订和销售平台:INFOBUS
2019/11/30 全球购物
某公司面试题
2012/03/05 面试题
静态变量和实例变量的区别
2015/07/07 面试题
销售部主管岗位职责
2013/12/18 职场文书
员工培训邀请函
2014/02/02 职场文书
股东协议书
2014/04/14 职场文书
文化建设工作方案
2014/05/12 职场文书
2014年个人委托书范本
2014/10/13 职场文书
确保工程质量承诺书
2015/04/29 职场文书
员工加薪申请报告
2015/05/15 职场文书
Android Canvas绘制文字横纵向对齐
2022/06/05 Java/Android