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开发实例分享bt种子爬虫程序和种子解析
May 21 Python
spyder常用快捷键(分享)
Jul 19 Python
详解Python中的动态属性和特性
Apr 07 Python
flask框架使用orm连接数据库的方法示例
Jul 16 Python
如何用Python制作微信好友个性签名词云图
Jun 28 Python
用python3 返回鼠标位置的实现方法(带界面)
Jul 05 Python
Python解压 rar、zip、tar文件的方法
Nov 19 Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
Jan 21 Python
Python3与fastdfs分布式文件系统如何实现交互
Jun 23 Python
Python代码需要缩进吗
Jul 01 Python
python 爬取腾讯视频评论的实现步骤
Feb 18 Python
Python使用BeautifulSoup4修改网页内容
May 20 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
YII模块实现绑定二级域名的方法
2014/07/09 PHP
如何让thinkphp在模型中自动完成session赋值小教程
2014/09/05 PHP
PHP查找与搜索数组元素方法总结
2015/06/12 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析
2020/02/11 PHP
JQuery的自定义事件代码,触发,绑定简单实例
2013/08/01 Javascript
jQuery实现的Div窗口震动效果实例
2015/08/07 Javascript
巧用jQuery选择器提高写表单效率的方法
2016/08/19 Javascript
js date 格式化
2017/02/15 Javascript
微信小程序中post方法与get方法的封装
2017/09/26 Javascript
vue下history模式刷新后404错误解决方法
2018/08/18 Javascript
vue初始化动画加载的实例
2018/09/01 Javascript
用Object.prototype.toString.call(obj)检测对象类型原因分析
2018/10/11 Javascript
微信小程序实现动态列表项的顺序加载动画
2019/07/25 Javascript
[02:55]含熏伴清风,风行者至宝、屠夫身心及典藏宝瓶二展示
2020/09/08 DOTA
python文件和目录操作函数小结
2014/07/11 Python
Python遍历文件夹和读写文件的实现方法
2017/05/10 Python
11月编程语言排行榜 Python逆袭C#上升到第4
2017/11/15 Python
python实现决策树
2017/12/21 Python
用pycharm开发django项目示例代码
2019/06/13 Python
python命令行工具Click快速掌握
2019/07/04 Python
python basemap 画出经纬度并标定的实例
2019/07/09 Python
Python 在OpenCV里实现仿射变换—坐标变换效果
2019/08/30 Python
Python sklearn中的.fit与.predict的用法说明
2020/06/28 Python
实例讲解Python 迭代器与生成器
2020/07/08 Python
HTML5中在title标题标签里设置小图标的方法
2020/06/23 HTML / CSS
泰国网上购物:Shopee泰国
2018/09/14 全球购物
销售总监工作职责
2013/11/21 职场文书
四议两公开实施方案
2014/03/28 职场文书
优秀的应届生自荐信
2014/05/23 职场文书
宪法宣传周工作方案
2014/05/26 职场文书
仓库管理员岗位职责
2015/02/03 职场文书
学校三八妇女节活动总结
2015/02/06 职场文书
《中国机长》观后感:敬畏生命,敬畏职责
2019/11/12 职场文书
JavaScript 防篡改对象的用法示例
2021/04/24 Javascript