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 06 Python
python下paramiko模块实现ssh连接登录Linux服务器
Jun 03 Python
对python3中pathlib库的Path类的使用详解
Oct 14 Python
python url 参数修改方法
Dec 26 Python
Python获取航线信息并且制作成图的讲解
Jan 03 Python
python实现AES和RSA加解密的方法
Mar 28 Python
Python+selenium点击网页上指定坐标的实例
Jul 05 Python
Django 实现外键去除自动添加的后缀‘_id’
Nov 15 Python
Python3 使用selenium插件爬取苏宁商家联系电话
Dec 23 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
Feb 29 Python
Django实现从数据库中获取到的数据转换为dict
Mar 27 Python
Python .py生成.pyd文件并打包.exe 的注意事项说明
Mar 04 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
phpexcel导出excel的颜色和网页中的颜色显示不一致
2012/12/11 PHP
解析VS2010利用VS.PHP插件调试PHP的方法
2013/07/19 PHP
PHP使用SOAP调用.net的WebService数据
2013/11/12 PHP
PHP常用技术文之文件操作和目录操作总结
2014/09/27 PHP
PHP实现简单的协程任务调度demo示例
2020/02/01 PHP
javascript div 遮罩层封锁整个页面
2009/07/10 Javascript
jsp网页搜索结果中实现选中一行使其高亮
2014/02/17 Javascript
JavaScript判断undefined类型的正确方法
2015/06/30 Javascript
Javascript简单改变表单元素背景的方法
2015/07/15 Javascript
js实现的奥运倒计时时钟效果代码
2015/12/09 Javascript
JS简单获取及显示当前时间的方法
2016/08/03 Javascript
VSCode配置react开发环境的步骤
2017/12/27 Javascript
解决iView中时间控件选择的时间总是少一天的问题
2018/03/15 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
2018/06/14 Javascript
JavaScript 对引擎、运行时、调用堆栈的概述理解
2018/10/22 Javascript
echarts实现词云自定义形状的示例代码
2019/02/20 Javascript
vue中组件通信的八种方式(值得收藏!)
2019/08/09 Javascript
微信公众号服务器验证Token步骤图解
2019/12/30 Javascript
JS数组的高级使用方法示例小结
2020/03/14 Javascript
[06:50]DSPL次级职业联赛十强晋级之路
2014/11/18 DOTA
一篇文章读懂Python赋值与拷贝
2018/04/19 Python
python递归法解决棋盘分割问题
2019/07/17 Python
python3实现高效的端口扫描
2019/08/31 Python
Python importlib模块重载使用方法详解
2020/10/13 Python
5个你不知道的HTML5的接口介绍
2013/08/07 HTML / CSS
美国彩妆品牌:Coastal Scents
2017/04/01 全球购物
世界上第一个创建了罩杯系统的美国内衣品牌:Maidenform
2019/03/23 全球购物
什么是索引指示器
2012/08/20 面试题
中学生打架检讨书
2014/02/10 职场文书
小学生开学感言
2014/02/28 职场文书
2014年五一活动策划方案
2014/03/15 职场文书
勿忘国耻9.18演讲稿(经典篇)
2014/09/14 职场文书
个人先进事迹材料
2014/12/29 职场文书
2016年大学光棍节活动总结
2016/04/05 职场文书
写自招自荐信的绝招!
2019/04/19 职场文书
JavaScript中关于预编译、作用域链和闭包的理解
2021/03/31 Javascript