python中@contextmanager实例用法


Posted in Python onFebruary 07, 2021

在对于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()

到此这篇关于python中@contextmanager实例用法的文章就介绍到这了,更多相关python中@contextmanager是什么内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中的字典遍历备忘
Jan 17 Python
python控制台中实现进度条功能
Nov 10 Python
Python按行读取文件的简单实现方法
Jun 22 Python
Pycharm学习教程(2) 代码风格
May 02 Python
Python实现图片转字符画的示例
Aug 22 Python
Python测试人员需要掌握的知识
Feb 08 Python
python 实现读取一个excel多个sheet表并合并的方法
Feb 12 Python
查看Python依赖包及其版本号信息的方法
Aug 13 Python
50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)
Nov 20 Python
python 检查数据中是否有缺失值,删除缺失值的方式
Dec 02 Python
python+openCV对视频进行截取的实现
Nov 27 Python
Python列表的索引与切片
Apr 07 Python
python tkinter实现下载进度条及抖音视频去水印原理
Feb 07 #Python
python gui开发——制作抖音无水印视频下载工具(附源码)
Feb 07 #Python
Python中全局变量和局部变量的理解与区别
Feb 07 #Python
Python抖音快手代码舞(字符舞)的实现方法
Feb 07 #Python
Python图像处理之膨胀与腐蚀的操作
Feb 07 #Python
django inspectdb 操作已有数据库数据的使用步骤
Feb 07 #Python
python数据抓取3种方法总结
Feb 07 #Python
You might like
推荐文章系统(一)
2006/10/09 PHP
php cookie 登录验证示例代码
2009/03/16 PHP
PHP 反向排序和随机排序代码
2010/06/30 PHP
php include和require的区别深入解析
2013/06/17 PHP
php的数组与字符串的转换函数整理汇总
2013/07/18 PHP
查找php配置文件php.ini所在路径的二种方法
2014/05/26 PHP
windows下配置php5.5开发环境及开发扩展
2014/12/25 PHP
[原创]PHP正则匹配中英文、数字及下划线的方法【用户名验证】
2017/08/01 PHP
php回调函数处理数组操作示例
2020/04/13 PHP
List Installed Software Features
2007/06/11 Javascript
3Z版基于jquery的图片复选框(asp.net+jquery)
2010/04/12 Javascript
jQuery Dialog 弹出层对话框插件
2010/08/09 Javascript
js获取select标签的值且兼容IE与firefox
2013/12/30 Javascript
JavaScript+canvas实现七色板效果实例
2016/02/18 Javascript
Bootstrap缩略图与警告框学习使用
2017/02/08 Javascript
jquery实现手机端单店铺购物车结算删除功能
2017/02/22 Javascript
浅谈Vuejs中nextTick()异步更新队列源码解析
2017/12/31 Javascript
JS实现的input选择图片本地预览功能示例
2018/08/29 Javascript
Vue.js轮播图走马灯代码实例(全)
2019/05/08 Javascript
Vue 开发必须知道的36个技巧(小结)
2019/10/09 Javascript
js判断复选框是否选中的方法示例【基于jQuery】
2019/10/10 jQuery
微信小程序地图绘制线段并且测量(实例代码)
2020/01/02 Javascript
javascript实现支付宝滑块验证码效果
2020/07/24 Javascript
js仿京东放大镜效果
2020/08/09 Javascript
django使用xlwt导出excel文件实例代码
2018/02/06 Python
详解通过API管理或定制开发ECS实例
2018/09/30 Python
Django 多环境配置详解
2019/05/14 Python
python之生产者消费者模型实现详解
2019/07/27 Python
英国运动风奢侈品购物网站:Maison De Fashion
2020/08/28 全球购物
什么是命名空间(NameSpace)
2015/11/24 面试题
法律专业推荐信范文
2013/11/29 职场文书
幼儿园园长新年寄语
2015/08/17 职场文书
2016年教师节慰问信
2015/12/01 职场文书
导游词之青岛太清宫
2019/12/13 职场文书
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android
阿里云ECS云服务器快照的概念以及如何使用
2022/04/21 Servers