python construct(python中如何使用@contextmanage?)
导读:本文教程操作环境:windows7系统、Python 3.9.1,DELL G3电脑。...
本文教程操作环境: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) #需要引入contextmanager fromcontextlibimportcontextmanager @contextmanager defmake_resource(): print(firstconnecttoresource) yieldMyContent() print(closeresourceconnection) #应用上下文管理器 withmake_resource()asr: r.query()创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!