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比较两个图片相似度的方法
Mar 13 Python
python中pass语句用法实例分析
Apr 30 Python
python远程连接服务器MySQL数据库
Jul 02 Python
对python读写文件去重、RE、set的使用详解
Dec 11 Python
python使用Plotly绘图工具绘制柱状图
Apr 01 Python
python动态进度条的实现代码
Jul 03 Python
python编程进阶之类和对象用法实例分析
Feb 21 Python
python使用PIL剪切和拼接图片
Mar 23 Python
PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法
Jun 10 Python
Python实现验证码识别
Jun 15 Python
python 提高开发效率的5个小技巧
Oct 19 Python
如何基于Python按行合并两个txt
Nov 03 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
简单谈谈favicon
2015/06/10 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
RGB颜色值转HTML十六进制(HEX)代码的JS函数
2009/04/25 Javascript
jQuery之日期选择器的深入解析
2013/06/19 Javascript
获取3个数组不重复的值的具体实现
2013/12/30 Javascript
js自动查找select下拉的菜单并选择(示例代码)
2014/02/26 Javascript
jQuery实现标题有打字效果的焦点图代码
2015/11/16 Javascript
JQuery ztree 异步加载实例讲解
2016/02/25 Javascript
jquery ajax双击div可直接修改div中的内容
2016/03/04 Javascript
jQuery实时显示鼠标指针位置和键盘ASCII码
2016/03/28 Javascript
Vue.js每天必学之构造器与生命周期
2016/09/05 Javascript
Vue 父子组件、组件间通信
2017/03/08 Javascript
JavaScript数据结构之链表的实现
2017/03/19 Javascript
jqgrid实现简单的单行编辑功能
2017/09/30 Javascript
Node.js 中使用 async 函数的方法
2017/11/20 Javascript
微信小程序登录换取token的教程
2018/05/31 Javascript
vue项目中仿element-ui弹框效果的实例代码
2019/04/22 Javascript
JavaScript setInterval()与setTimeout()计时器
2019/12/27 Javascript
浅谈Vue3.0新版API之composition-api入坑指南
2020/04/30 Javascript
[52:03]Secret vs VG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
在Python中测试访问同一数据的竞争条件的方法
2015/04/23 Python
python里使用正则的findall函数的实例详解
2017/10/19 Python
Python字典数据对象拆分的简单实现方法
2017/12/05 Python
对numpy中数组元素的统一赋值实例
2018/04/04 Python
Python3.0 实现决策树算法的流程
2019/08/08 Python
详解Python在使用JSON时需要注意的编码问题
2019/12/06 Python
pycharm 设置项目的根目录教程
2020/02/12 Python
keras实现图像预处理并生成一个generator的案例
2020/06/17 Python
Python tempfile模块生成临时文件和临时目录
2020/09/30 Python
使用Python Tkinter实现剪刀石头布小游戏功能
2020/10/23 Python
本科毕业生求职自荐信
2014/04/09 职场文书
捐款倡议书
2014/04/14 职场文书
技校毕业生自荐信
2014/06/03 职场文书
2016入党培训心得体会范文
2016/01/08 职场文书
selenium.webdriver中add_argument方法常用参数表
2021/04/08 Python
7个关于Python的经典基础案例
2021/11/07 Python