python中如何使用@contextmanage?
发布时间:2024-09-09 10:20:29

本教程的操作环境: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__方法。
classMyContent:
defquery(self):
print('querydata')
#contextmanger需要引入
fromcontextlibimportcontextmanager
@contextmanager
defmake_resource():
print('firstconnecttoresource')
yieldMyContent()
print('closeresourceconnection')
#应用上下文管理器
withmake_resource()asr:
r.query()以上就是在python中使用@contextmanage操作前一定要先具体说明方法。@contextmanage理解逻辑,然后进行相关的实例操作。
