在对于python中的装饰器,我们一般会使用它辅助方法。在我们学习的上下文管理器中,有一个@contextmanager装饰器,它能够帮助我们在函数中定义上下文管理器方法,实现代码方面的简化。下面我们就python中@contextmanager的概念、使用注意、实例进行分享。
1、概念
是contextlib模块提供的一个装饰器,用于将一个函数声明上下文管理,无需创建一个类或者单独的__enter__()方法和__exit__()方法,就可以实现上下文管理。
2、注意
装饰器@contextmanager真正的用法并不是简化上下文管理器,而是去定义上下文管理器的方法,是对原来不是上下文管理器的类变成了一个上下文管理器。
3、实例
from contextlib import contextmanager import time @contextmanager def demo(label): start = time.time() try: yield finally: end = time.time() print('{}: {}'.format(label, end - start)) with demo('counting'): n = 10000000 while n > 0: n -= 1 # counting: 1.32399988174
看上面这个例子,函数中yield之前的所有代码都类似于上下文管理器中__enter__方法的内容。而yield之后的所有代码都如__exit__方法的内容。如果执行过程中发生了异常,则会在yield语句触发。
实例扩展:
实例一:
from contextlib import contextmanager class File(): def query(self): print('查询文件') @contextmanager def open(): print('打开文件') yield File() print('关闭文件') with open() as f: f.query() # 结果 打开文件 查询文件 关闭文件
实例二:
from contextlib import contextmanager class DataBase(): def query(self): print('写入操作') @contextmanager def open(self): try: yield self.commit() except Exception as e: self.rollback() raise e db = DataBase() with db.open(): db.query()
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
白云城资源网 Copyright www.dyhadc.com
暂无“python中@contextmanager实例用法”评论...
更新日志
2024年07月03日
2024年07月03日
- 华语流行S.H.E《12CD》2001~2010[APE+CUE][3.7GB]
- 北风之望饮品怎么调配?饮品调酒配方分享
- 原画壁纸及美图第254期,无水印可自取
- 原画壁纸及美图第255期,无水印可自取
- 群星.1991-宝丽金冬日浓情【宝丽金】【WAV+CUE】
- 胡杨林.2006-香水有毒【太格印象】【WAV+CUE】
- 陈晓东.2002-从未忘记2CD【环球】【WAV+CUE】
- 绝区零珂蕾妲阵容怎么搭配好 珂蕾妲队伍搭配攻略
- 绝区零暴击鸣徽有哪些 绝区零暴击鸣徽效果介绍
- 魔兽世界奥格瑞玛法师训练师在哪 奥格瑞玛法师训练师位置介绍
- 《艾尔登法环》dlc带电祷告位置介绍
- 《幻兽帕鲁》泰锋boss坐标位置介绍
- 《山河旅探》6月份更新内容介绍
- 群星.2012《高雄国际Hi-End音响大展纪念发烧金碟(最响宣言)》[WAV分轨].
- 黄宣2021-Beanstalk[否极泰来][WAV+CUE]