python中@contextmanager实例用法

 更新时间:2021年02月07日 16:37:57   作者:小妮浅浅  
在本篇文章里小编给大家整理的是一篇关于python中@contextmanager实例用法,对此有兴趣的朋友们可以学习下。

在对于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中的常用函数使用及说明

    这篇文章主要介绍了Python中的常用函数使用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • pycharm远程连接服务器运行pytorch的过程详解

    pycharm远程连接服务器运行pytorch的过程详解

    这篇文章主要介绍了在Linux环境下使用Anaconda管理不同版本的Python环境,并通过PyCharm远程连接服务器来运行PyTorch的过程,包括安装PyTorch、CUDA以及配置PyCharm远程开发环境的详细步骤,需要的朋友可以参考下
    2025-02-02
  • python使用ctypes调用dll遇到的坑解决记录

    python使用ctypes调用dll遇到的坑解决记录

    这篇文章主要为大家介绍了python使用ctypes调用dll遇到的坑解决记录,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • 手把手教你使用Python绘制时间序列图

    手把手教你使用Python绘制时间序列图

    这篇文章主要介绍了手把手教你使用Python绘制时间序列图,本文将以股价数据集为例,指导你从Quandl下载股价数据集,并将这些数据绘制在价格和成交量图表上,需要的朋友可以参考下
    2022-01-01
  • PyTorch中的神经网络 Mnist 分类任务

    PyTorch中的神经网络 Mnist 分类任务

    这篇文章主要介绍了PyTorch中的神经网络 Mnist 分类任务,在本次的分类任务当中,我们使用的数据集是 Mnist 数据集,这个数据集大家都比较熟悉,需要的朋友可以参考下
    2023-03-03
  • pandas dataframe rolling移动计算方式

    pandas dataframe rolling移动计算方式

    在Pandas中,rolling()方法用于执行移动窗口计算,常用于时间序列数据分析,例如,计算某商品的7天或1个月销售总量,可以通过rolling()轻松实现,该方法的关键参数包括window(窗口大小),min_periods(最小计算周期)
    2024-09-09
  • Python django搭建layui提交表单,表格,图标的实例

    Python django搭建layui提交表单,表格,图标的实例

    今天小编就为大家分享一篇Python django搭建layui提交表单,表格,图标的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python3 使用OpenCV计算滑块拼图验证码缺口位置(场景示例)

    python3 使用OpenCV计算滑块拼图验证码缺口位置(场景示例)

    这篇文章主要介绍了python3 使用OpenCV计算滑块拼图验证码缺口位置,本文通过场景示例给大家详细介绍,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)

    Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)

    这篇文章主要介绍了Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • Python continue继续循环用法总结

    Python continue继续循环用法总结

    本篇文章给大家总结了关于Python continue继续循环的相关知识点以及用法,有需要的朋友跟着学习下吧。
    2018-06-06

最新评论