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查找指定具有相同内容文件的方法
Jun 28 Python
简介Django框架中可使用的各类缓存
Jul 23 Python
利用python生成一个导出数据库的bat脚本文件的方法
Dec 30 Python
Python简单定义与使用字典dict的方法示例
Jul 25 Python
python绘制多个曲线的折线图
Mar 23 Python
Python使用matplotlib 画矩形的三种方式分析
Oct 31 Python
Python实现对adb命令封装
Mar 06 Python
python使用信号量动态更新配置文件的操作
Apr 01 Python
python3 kubernetes api的使用示例
Jan 12 Python
python制作抽奖程序代码详解
Jan 15 Python
python实现股票历史数据可视化分析案例
Jun 10 Python
Python爬虫框架之Scrapy中Spider的用法
Jun 28 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
web目录下不应该存在多余的程序(安全考虑)
2012/05/09 PHP
php抽象类使用要点与注意事项分析
2015/02/09 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
2016/01/28 PHP
PHP开发中csrf攻击的简单演示和防范
2017/05/07 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
Javascript中匿名函数的多种调用方式总结
2013/12/06 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
javascript实现给定半径求出圆的面积
2015/06/26 Javascript
利用AngularJs实现京东首页轮播图效果
2016/09/08 Javascript
JSON键值对序列化和反序列化解析
2017/01/24 Javascript
javascript实现下雨效果
2017/03/27 Javascript
Bootstrap实现的经典栅格布局效果实例【附demo源码】
2017/03/30 Javascript
AngularJS自定义指令详解(有分页插件代码)
2017/06/12 Javascript
简单实现js放大镜效果
2017/07/24 Javascript
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
2017/09/07 Javascript
简单谈谈JS中的正则表达式
2017/09/11 Javascript
vue学习之mintui picker选择器实现省市二级联动示例
2017/10/12 Javascript
微信小程序实现导航栏选项卡效果
2020/06/19 Javascript
详解ES6 Promise对象then方法链式调用
2018/10/20 Javascript
详解Node.js 中使用 ECDSA 签名遇到的坑
2018/11/26 Javascript
详解es6新增数组方法简便了哪些操作
2019/05/09 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
2019/08/28 Javascript
JS对日期操作封装代码实例
2019/11/08 Javascript
在Python的Django框架中编写编译函数
2015/07/20 Python
10招!看骨灰级Pythoner玩转Python的方法
2019/04/15 Python
Django中提供的6种缓存方式详解
2019/08/05 Python
正则给header的冒号两边参数添加单引号(Python请求用)
2019/08/09 Python
初次部署django+gunicorn+nginx的方法步骤
2019/09/11 Python
树莓派极简安装OpenCv的方法步骤
2019/10/10 Python
Ted Baker美国官网:英国时尚品牌
2018/10/29 全球购物
维德科技C#面试题笔试题
2015/12/09 面试题
后勤岗位职责
2013/11/26 职场文书
拾金不昧的表扬信
2014/01/16 职场文书
中学生寄语大全
2014/04/03 职场文书
2015年材料员工作总结
2015/04/30 职场文书
单位实习介绍信
2015/05/05 职场文书