python中如何使用@contextmanage?
2023-03-20 15:26:40 时间
本文教程操作环境:windows7系统、Python 3.9.1,DELL G3电脑。
1、实现逻辑
(1)初始化一个 _GeneratorContextManager 类,构造方法接受了一个生成器 gen
(2)这个类实现了上下文管理器协议 __enter__ 和 __exit__
(3)执行 with 时会进入到 __enter__ 方法,然后执行这个生成器,执行时会运行到 with 语法块内的 yield 处
(4)__enter__ 返回 yield 的结果
(5)如果 with 语法块没有发生异常,with 执行结束后,会进入到 __exit__ 方法,再次执行生成器,这时会运行 yield 之后的代码逻辑
(6)如果 with 语法块发生了异常,__exit__ 会把这个异常通过生成器,传入到 with 语法块内,也就是把异常抛给调用者
2、使用实例
在Python中,可以使用装饰器 @contextmanager来简化上下文管理器,也就是不需要定义__enter__和__exit__方法。
class MyContent: def query(self): print('query data') # 需要引入contextmanager from contextlib import contextmanager @contextmanager def make_resource(): print('first connect to resource') yield MyContent() print('close resource connection') #应用上下文管理器 with make_resource() as r: r.query()
以上就是python中使用@contextmanage的方法,大家在操作之前,一定要先就具体的@contextmanage实现逻辑进行了解,然后再展开相关的实例操作。
相关文章
- MySQLump 参数--Lock-Tables浅析
- 谷歌将为 Android 12 推出全新游戏模式 API,有望支持三档性能调节
- 如何在Python中操作数据库
- Python操作Redis大全
- delete、truncate、drop的区别有哪些,该如何选择
- 聊聊 Python 数据处理全家桶(MongoDB 篇)
- 聊聊 Python 数据处理全家桶(Redis篇)
- MySQL limit导致的执行计划差异
- mysqldump一致性热备原理剖析
- 利用SQL和Python分别实现人流量查询,考验逻辑思维的时候到了
- 使用 Python 配合 Redis 超越缓存
- 面试官:你来讲讲一条查询语句的具体执行过程
- 我用Python处理3万多条数据,只要几秒钟……
- 代码详解:使用Python从不同表格中提取数据
- 自定义构建交互式SSH应用程序,以Python为例
- 深入理解select count(*)底层究竟做了什么
- 使用Redis和Python构建一个共享单车的应用程序
- Python实现数据可视化,看如何监控你的爬虫?
- 什么是大数据?如何成为大数据的技术大牛?
- 零基础Python数据库怎么学?大牛带你扬帆起航