本教程的操作环境: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理解逻辑,然后进行相关的实例操作。