当前位置: 首页 > 图灵资讯 > 行业资讯> python中如何使用@contextmanage?

python中如何使用@contextmanage?

来源:图灵python
时间: 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理解逻辑,然后进行相关的实例操作。