标准库中还有个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块 二相关推荐

  1. Python 上下文管理器和with块 一

    上下文管理器对象存在的目的是管理 with 语句,就像迭代器的存在是为了管理 for 语句一样 上下文管理器协议包含 __enter__ 和 __exit__ 两个方法 把值绑定到目标变量上(as 子 ...

  2. python 上下文管理器、 else 块、@contextmanager

    文章目录 1. else 2. with上下文管理器 3. contextlib模块实用工具 4. @contextmanager 装饰器 learn from <流畅的python> 1 ...

  3. 读书笔记:《流畅的Python》第15章 上下文管理器和else块

    # 第15章 上下文管理器和else块""" 本章内容提要:with语句和上下文管理器for while try语句的else子句 """# ...

  4. 爱上python系列------python上下文管理器(二):对suppress进行装饰器重新实现

    python上下文管理器可以做的事情简直不能太多 这不,官方的文档实现了一个方法suppress,用于处理异常 from contextlib import suppresswith suppress ...

  5. Python上下文管理器的魔力

    点击关注我哦 一篇文章带你了解Python上下文管理器的魔力 小编将为您准备一份很棒的Python上下文管理器使用指南,这将使您的代码更具可读性和可靠性,降低您的错误发生率. 资源管理器是我们在任何编 ...

  6. 此上下文中不支持函数定义。请在代码文件中创建函数。_深入解析Python上下文管理器,让你不再迷茫!...

    1. 上下文管理器 一个类只要实现了 __enter__() 和 __exit__() 这个两个方法,通过该类创建的对象我们就称之为上下文管理器. 上下文管理器可以使用 with 语句,with语句之 ...

  7. Python 上下文管理器和 with 语句

    1. 上下文管理器概念 什么是 Python 的上下文管理器(Context Managers)呢? ​ 含有 __enter__ 和 __exit__ 方法的对象就是.上下文管理器存在的目的是管理 ...

  8. 神经网络与深度学习——TensorFlow2.0实战(笔记)(四)(python上下文管理器)

    with语句 使用with语句替代try-finally 语句,代码更加的简洁清晰 对于需要对资源进行访问的任务,无论在代码运行过程中,是否发 生异常,都会执行必要的清理操作,释放资源. 1. wit ...

  9. Python 上下文管理器与with语句

    Python中把进入代码块前调用__enter__ 方法并在离开代码块后调用__exit__方法的对象作为上下文管理器,本文中我们就来深入解析Python中的上下文管理器,来看看上下文管理器的作用及用 ...

最新文章

  1. qteewidgetitem添加子节点_行为树的节点
  2. 0428(字典,列表,循环)
  3. thinkphp mysql批量入库_ThinkPHP3.2框架使用addAll()批量插入数据的方法
  4. python面向对象继承_Python 面向对象 --- 继承
  5. mysql结果以字符串显示不出来,mysql – 为什么SQl MATCH AGAINST找不到结果中只有3个字符的结果?...
  6. windows 卸载IE8还原IE7的方法
  7. python表单提交的两种方式_Flask框架学习笔记之表单基础介绍与表单提交方式
  8. 《程序员修炼之道:从小工到专家》阅读笔记03
  9. java thrift连接池_由浅入深了解Thrift之客户端连接池化
  10. 强烈推荐 16 款 IDEA 插件,让你的开发速度飞起来 | 原力计划
  11. dfs记忆化搜索(带限制的选择问题) 讲解:LeetCode打家劫舍||| / 蓝桥 地宫取宝/蓝桥 k进制数//剪格子//方格分割
  12. Qt 中使用全局变量的方法
  13. [原创]Firefox扩展
  14. cobbler装系统
  15. Atitit  信息管理 艾提拉著作 CAPT1信息源数据源 目录 1. 数据元的数据格式 图片 文本 视频 音频 2 2. 按照应用功能使用分类 2 2.1. Diary Cyarlog 2
  16. 00_kubernetes组件版本和配置策略
  17. 指导手册05:MapReduce编程入门.md
  18. 秒解UTF-8带来的烦恼
  19. C语言拯救者(程序的预处理、编译、链接与宏- -15)
  20. 【实战系列】intel 8代CPU I7 8700完美装WIN7系统

热门文章

  1. Matlab 的多种灰度归一化方法代码演示(可以直接运行)
  2. Adobe推出正式版本的学生版(免费)
  3. linux 盘符 路径,linux下powerpath对盘与更改盘符名
  4. discuz帖子列表页调用帖子作者头像
  5. Floyd算法实现公交地铁站点之间的最短路径规划
  6. java怎么向二维数组赋值_如何给JAVA二维数组赋值
  7. 微信小程序显示天气预报
  8. 打造一个属于你自己的Android版2048
  9. 量子力学与量子计算(2)——光电效应与爱因斯坦光子假说
  10. Oracle 查看和扩展表空间