本文教程操作环境:
windows7系统、Python 3.9.1,DELL G3电脑。
1、实现逻辑
(1)初始化一个 _GeneratorContextManager 类,构造方法接受了一个生成器 gen
(2)这个类实现了上下文管理器协议 __enter__ 和 __exit__
(3)执行with时,会进入__enter__方法,然后执行generator,执行时会运行到with语法块中的yield
(4)__enter__ 返回 yield 的结果
(5)如果with语法块没有异常,with执行完成后,会进入__exit__方法,再次执行generator。这个时候会运行yield之后的代码逻辑
(6)如果with语法块发生异常,__exit__会通过generator将异常传入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
实现逻辑理解,再展开相关的实例操作。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 一篇文章带你了解Python的协程12/13
- ♥ 如何使用python查找从1到n的所有整数的总和08/21
- ♥ Python 运算符优先级11/06
- ♥ python解释器的提示是什么09/14
- ♥ 如何在 Python 中提取字符串的内容08/27
- ♥ 如何在python中传递可变参数11/10
内容反馈