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生成器的使用方法
Nov 21 Python
Python中让MySQL查询结果返回字典类型的方法
Aug 22 Python
Python 爬虫多线程详解及实例代码
Oct 08 Python
python 实现删除文件或文件夹实例详解
Dec 04 Python
Python基于identicon库创建类似Github上用的头像功能
Sep 25 Python
安装python时MySQLdb报错的问题描述及解决方法
Mar 20 Python
pandas 对日期类型数据的处理方法详解
Aug 08 Python
python由已知数组快速生成新数组的方法
Apr 08 Python
基于python实现地址和经纬度转换
May 19 Python
利用python制作拼图小游戏的全过程
Dec 04 Python
用python实现一个简单的验证码
Dec 09 Python
总结Python使用过程中的bug
Jun 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执行速度全攻略(上)
2006/10/09 PHP
PHP生成带有雪花背景的验证码
2008/09/28 PHP
php+js实现图片的上传、裁剪、预览、提交示例
2013/08/27 PHP
Zend Framework教程之Resource Autoloading用法实例
2016/03/08 PHP
PHP接收App端发送文件流的方法
2016/09/23 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
2016/09/30 PHP
5款Javascript颜色选择器
2009/10/25 Javascript
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
基于jquery创建的一个图片、视频缓冲的效果样式插件
2012/08/28 Javascript
JS小游戏之象棋暗棋源码详解
2014/09/25 Javascript
javascript中alert()与console.log()的区别
2015/08/26 Javascript
基于JS实现新闻列表无缝向上滚动实例代码
2016/01/22 Javascript
nodejs操作mysql实现增删改查的实例
2017/05/28 NodeJs
ES6学习教程之Map的常用方法总结
2017/08/03 Javascript
JavaScript实现为事件句柄绑定监听函数的方法分析
2017/11/14 Javascript
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
2019/01/09 Javascript
重学 JS:为啥 await 不能用在 forEach 中详解
2019/04/15 Javascript
使用Node.js写一个代码生成器的方法步骤
2019/05/10 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
layui 数据表格 根据值(1=业务,2=机构)显示中文名称示例
2019/10/26 Javascript
js实现坦克移动小游戏
2019/10/28 Javascript
详解vue中多个有顺序要求的异步操作处理
2019/10/29 Javascript
vue动态路由:路由参数改变,视图不更新问题的解决
2019/11/05 Javascript
小程序Scroll-view上拉滚动刷新数据
2020/06/21 Javascript
pygame库实现移动底座弹球小游戏
2020/04/14 Python
使用python远程操作linux过程解析
2019/12/04 Python
如何定义TensorFlow输入节点
2020/01/23 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
英国天然宝石首饰购买网站:Gemondo Jewellery
2018/10/23 全球购物
网络管理员岗位职责
2014/03/17 职场文书
关于雷锋的演讲稿
2014/05/10 职场文书
企业宣传策划方案
2014/05/29 职场文书
学生上课看漫画的检讨书
2014/09/26 职场文书
2014社区健康教育工作总结
2014/12/16 职场文书
小学四年级班主任工作经验交流材料
2015/11/02 职场文书
幼儿园班级管理心得体会
2016/01/07 职场文书