Python 上下文管理器和with块 二
标准库中还有个contextlib 模块,提供一些实用工具,
- closing
如果对象提供了 close() 方法,但没有实现 __enter__/__exit__ 协议,那么可以使用这个函数构建上下文管理 器。 - @contextmanager
这个装饰器把简单的生成器函数变成上下文管理器,这样就不用创 建类去实现管理器协议了。 ExitStack
这个上下文管理器能进入多个上下文管理器。例如,同时打开任意一个文件列表中的所有文件。
下面展开介绍下@contextmanager
@contextmanager 装饰器能减少创建上下文管理器的样板代码量,因为不用编写一个完整的类,定义 __enter__ 和 __exit__ 方法,而只 需实现有一个 yield 语句的生成器,生成想让__enter__ 方法返回的值。yield 语句的作用是把函数的定义体分成两部分:yield语句前面的所有代码在 with块开始时(即解释器调用 __enter__ 方法时)执行,yield语句后面的代码在with块结束时(即调用__exit__方法时)执行。
>>> @contextmanager
... def lookingglass():
... import sys
... origin_writer=sys.stdout.write
... def reverse_writer(text):
... origin_writer(text[::-1])
... sys.stdout.write=reverse_writer
... try:
... yield 'yield return'
... except:
... print('enter exception')
... finally:
... sys.stdout.write=origin_writer
...
>>> with lookingglass() as what:
... print('test code')
... print(what)
...
edoc tset
nruter dleiy
>>> print('test')
test
生成器函数的作用更像是协程:执行到某一点时暂停,让客户代码运行,直到客户让协程继续做事
Python 上下文管理器和with块一 https://blog.csdn.net/s695811494/article/details/112093625
Python 上下文管理器和with块 二相关推荐
- Python 上下文管理器和with块 一
上下文管理器对象存在的目的是管理 with 语句,就像迭代器的存在是为了管理 for 语句一样 上下文管理器协议包含 __enter__ 和 __exit__ 两个方法 把值绑定到目标变量上(as 子 ...
- python 上下文管理器、 else 块、@contextmanager
文章目录 1. else 2. with上下文管理器 3. contextlib模块实用工具 4. @contextmanager 装饰器 learn from <流畅的python> 1 ...
- 读书笔记:《流畅的Python》第15章 上下文管理器和else块
# 第15章 上下文管理器和else块""" 本章内容提要:with语句和上下文管理器for while try语句的else子句 """# ...
- 爱上python系列------python上下文管理器(二):对suppress进行装饰器重新实现
python上下文管理器可以做的事情简直不能太多 这不,官方的文档实现了一个方法suppress,用于处理异常 from contextlib import suppresswith suppress ...
- Python上下文管理器的魔力
点击关注我哦 一篇文章带你了解Python上下文管理器的魔力 小编将为您准备一份很棒的Python上下文管理器使用指南,这将使您的代码更具可读性和可靠性,降低您的错误发生率. 资源管理器是我们在任何编 ...
- 此上下文中不支持函数定义。请在代码文件中创建函数。_深入解析Python上下文管理器,让你不再迷茫!...
1. 上下文管理器 一个类只要实现了 __enter__() 和 __exit__() 这个两个方法,通过该类创建的对象我们就称之为上下文管理器. 上下文管理器可以使用 with 语句,with语句之 ...
- Python 上下文管理器和 with 语句
1. 上下文管理器概念 什么是 Python 的上下文管理器(Context Managers)呢? 含有 __enter__ 和 __exit__ 方法的对象就是.上下文管理器存在的目的是管理 ...
- 神经网络与深度学习——TensorFlow2.0实战(笔记)(四)(python上下文管理器)
with语句 使用with语句替代try-finally 语句,代码更加的简洁清晰 对于需要对资源进行访问的任务,无论在代码运行过程中,是否发 生异常,都会执行必要的清理操作,释放资源. 1. wit ...
- Python 上下文管理器与with语句
Python中把进入代码块前调用__enter__ 方法并在离开代码块后调用__exit__方法的对象作为上下文管理器,本文中我们就来深入解析Python中的上下文管理器,来看看上下文管理器的作用及用 ...
最新文章
- qteewidgetitem添加子节点_行为树的节点
- 0428(字典,列表,循环)
- thinkphp mysql批量入库_ThinkPHP3.2框架使用addAll()批量插入数据的方法
- python面向对象继承_Python 面向对象 --- 继承
- mysql结果以字符串显示不出来,mysql – 为什么SQl MATCH AGAINST找不到结果中只有3个字符的结果?...
- windows 卸载IE8还原IE7的方法
- python表单提交的两种方式_Flask框架学习笔记之表单基础介绍与表单提交方式
- 《程序员修炼之道:从小工到专家》阅读笔记03
- java thrift连接池_由浅入深了解Thrift之客户端连接池化
- 强烈推荐 16 款 IDEA 插件,让你的开发速度飞起来 | 原力计划
- dfs记忆化搜索(带限制的选择问题) 讲解:LeetCode打家劫舍||| / 蓝桥 地宫取宝/蓝桥 k进制数//剪格子//方格分割
- Qt 中使用全局变量的方法
- [原创]Firefox扩展
- cobbler装系统
- Atitit 信息管理 艾提拉著作 CAPT1信息源数据源 目录 1. 数据元的数据格式 图片 文本 视频 音频	2 2. 按照应用功能使用分类	2 2.1. Diary Cyarlog	2
- 00_kubernetes组件版本和配置策略
- 指导手册05:MapReduce编程入门.md
- 秒解UTF-8带来的烦恼
- C语言拯救者(程序的预处理、编译、链接与宏- -15)
- 【实战系列】intel 8代CPU I7 8700完美装WIN7系统