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使用点操作符访问字典(dict)数据的方法
Mar 16 Python
python正常时间和unix时间戳相互转换的方法
Apr 23 Python
简单的连接MySQL与Python的Bottle框架的方法
Apr 30 Python
详解Python的Django框架中的通用视图
May 04 Python
详解Python 模拟实现生产者消费者模式的实例
Aug 10 Python
JavaScript中的模拟事件和自定义事件实例分析
Jul 27 Python
Python实现正整数分解质因数操作示例
Aug 01 Python
Python数据分析matplotlib设置多个子图的间距方法
Aug 03 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
Jun 27 Python
Tensorflow中k.gradients()和tf.stop_gradient()用法说明
Jun 10 Python
Python叠加矩形框图层2种方法及效果
Jun 18 Python
Python Numpy之linspace用法说明
Apr 17 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
PHP脚本的10个技巧(4)
2006/10/09 PHP
php连接Access数据库错误及解决方法
2013/06/20 PHP
php ctype函数中文翻译和示例
2014/03/21 PHP
php实现约瑟夫问题的方法小结
2015/03/23 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
使弱类型的语言JavaScript变强势
2009/06/22 Javascript
使用jquery+CSS实现控制打印样式
2014/12/31 Javascript
JS实现在线统计一个页面内鼠标点击次数的方法
2015/02/28 Javascript
JavaScript中getUTCSeconds()方法的使用详解
2015/06/11 Javascript
Bootstrap自动适应PC、平板、手机的Bootstrap栅格系统
2016/05/27 Javascript
Angular 应用技巧总结
2016/09/14 Javascript
JavaScript中运算符规则和隐式类型转换示例详解
2017/09/06 Javascript
node.js文件上传重命名以及移动位置的示例代码
2018/01/19 Javascript
浅谈Vue render函数在ElementUi中的应用
2018/09/06 Javascript
Vue项目部署在Spring Boot出现页面空白问题的解决方案
2018/11/26 Javascript
微信小程序云开发之数据库操作
2019/05/18 Javascript
原生js实现3D轮播图
2020/03/21 Javascript
jQuery实现移动端下拉展现新的内容回弹动画
2020/06/24 jQuery
jquery插件实现轮播图效果
2020/10/19 jQuery
Python语言的变量认识及操作方法
2018/02/11 Python
python微信公众号之关键词自动回复
2018/06/15 Python
python3监控CentOS磁盘空间脚本
2018/06/21 Python
Python with标签使用方法解析
2020/01/17 Python
解决Django no such table: django_session的问题
2020/04/07 Python
html5调用摄像头功能的实现代码
2018/05/07 HTML / CSS
HTML5的自定义属性data-*详细介绍和JS操作实例
2014/04/10 HTML / CSS
Omio荷兰:预订火车、巴士和机票
2018/11/04 全球购物
lululemon美国官网:瑜伽服+跑步装备
2018/11/16 全球购物
安德玛比利时官网:Under Armour比利时
2019/08/28 全球购物
阿里巴巴英国:Alibaba英国
2019/12/11 全球购物
澳大利亚商务邀请函
2014/01/17 职场文书
医院护士工作检讨书
2014/10/26 职场文书
运动会表扬稿
2015/01/16 职场文书
城南旧事电影观后感
2015/06/16 职场文书
独生子女证明范本
2015/06/19 职场文书
铁拳制作人赞《铁拳7》老头环Mod:制作精良 但别弄了
2022/04/03 其他游戏