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和MD5实现网站挂马检测程序
Mar 13 Python
python2与python3中关于对NaN类型数据的判断和转换方法
Oct 30 Python
Python自定义一个类实现字典dict功能的方法
Jan 19 Python
Python3.5装饰器典型案例分析
Apr 30 Python
python批量处理文件或文件夹
Jul 28 Python
把vgg-face.mat权重迁移到pytorch模型示例
Dec 27 Python
如何基于Python创建目录文件夹
Dec 31 Python
Django-rest-framework中过滤器的定制实例
Apr 01 Python
Python生成器next方法和send方法区别详解
May 30 Python
Python爬虫模拟登陆哔哩哔哩(bilibili)并突破点选验证码功能
Dec 21 Python
python 定义函数 返回值只取其中一个的实现
May 21 Python
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
May 27 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
快速配置PHPMyAdmin方法
2008/06/05 PHP
深入eAccelerator与memcached的区别详解
2013/06/06 PHP
php中stdClass的用法分析
2015/02/27 PHP
PHP cURL初始化和执行方法入门级代码
2015/05/28 PHP
php版银联支付接口开发简明教程
2016/10/14 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
由document.body和document.documentElement想到的
2009/04/13 Javascript
js 中{},[]中括号,大括号使用详解
2011/05/12 Javascript
javascript 在firebug调试时用console.log的方法
2012/05/10 Javascript
学习js在线html(富文本,所见即所得)编辑器
2012/12/18 Javascript
Javascript实现关联数据(Linked Data)查询及注意细节
2013/02/22 Javascript
解析javascript 数组以及json元素的添加删除
2013/06/26 Javascript
jquery组件使用中遇到的问题整理及解决
2014/02/21 Javascript
JS实现一个列表中包含上移下移删除等功能
2014/09/24 Javascript
jQuery中appendTo()方法用法实例
2015/01/08 Javascript
ExpressJS入门实例
2015/01/14 Javascript
整理JavaScript创建对象的八种方法
2015/11/03 Javascript
jQuery实现带水平滑杆的焦点图动画插件
2016/03/08 Javascript
BootStrap中的table实现数据填充与分页应用小结
2016/05/26 Javascript
使用nodejs中httpProxy代理时候出现404异常的解决方法
2016/08/15 NodeJs
jQuery实现图片滑动效果
2017/03/08 Javascript
js每隔两秒输出数组中的一项(实例)
2017/05/28 Javascript
微信小程序实现的一键复制功能示例
2019/04/24 Javascript
node解析修改nginx配置文件操作实例分析
2019/11/06 Javascript
js实现select下拉框选择
2020/01/11 Javascript
ES6 Generator基本使用方法示例
2020/06/06 Javascript
如何使用 JavaScript 操作浏览器历史记录 API
2020/11/24 Javascript
Python中的list与tuple集合区别解析
2019/10/12 Python
Python是什么 Python的用处
2020/05/26 Python
德国富尔达运动鞋店:43einhalb
2020/12/25 全球购物
在什么时候需要使用"常引用"
2015/12/31 面试题
简述DNS进行域名解析的过程
2013/12/02 面试题
初中生自我鉴定
2014/02/04 职场文书
离婚协议书应该怎么写
2014/10/12 职场文书
道歉短信大全
2015/05/12 职场文书
Python 中random 库的详细使用
2021/06/03 Python