python中如何使用@contextmanage?
- 更新时间:2021-07-29 10:07:12
- 编辑:钱经亘
给网友朋友们带来一篇相关的编程文章,网友邓智鑫根据主题投稿了本篇教程内容,涉及到Python相关内容,已被507网友关注,内容中涉及的知识点可以在下方直接下载获取。
参考资料
- 《Python学习手册(原书第4版)》示例源代码 配套资源 / 1.43 MB / Mark Lutz 推荐度:
- 《Python程序设计:人工智能案例实践》源代码 配套资源 / 6.4 MB / [美]保罗·戴特尔 (Paul Deitel) 哈维·戴特尔(Harvey Deitel) 推荐度:
- 《Python开发技术大全》配书资源 配套资源 / 3.9 MB / 吴仲治 推荐度:
- 《Python神经网络编程》配套资源 配套资源 / 108.1 KB / [英]塔里克·拉希德(Tariq Ras 推荐度:
- 量化投资:以Python为工具 PDF 电子书 / 66.7 MB / 蔡立耑 推荐度:
正文内容
无意中在网上看到《python中如何使用@contextmanage?》,感觉很有用处,扩充了更多相关实例,看完如果觉得有用请记得收藏。
本文教程操作环境: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__方法。
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中面向对象编程知识点分享
1.什么是面向对象面向对象(oop)是一种抽象的方法来理解这个世界,世间万物都可以抽象成一个对象,一切事物都是由对象构成的。应用在编程中,是一种开发程序的方法,它将对象作为程序
发布时间:2020-01-07
-
什么是字符串?(2)转义字符与运算符
描述了python字符串中的转义字符和字符串运算符
发布时间:2019-07-11