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 实现方阵的对角线遍历示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • 详解Python如何巧妙实现数学阶乘n!

    详解Python如何巧妙实现数学阶乘n!

    一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!,本文就给大家介绍如何使用python和第三方库来实现数学运算中的阶乘以及阶乘累计求和
    2023-03-03
  • Python常见库matplotlib学习笔记之画图中各个模块的含义及修改方法

    Python常见库matplotlib学习笔记之画图中各个模块的含义及修改方法

    matplotlib是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图,下面这篇文章主要给大家介绍了关于Python常见库matplotlib学习笔记之画图中各个模块的含义及修改方法的相关资料,需要的朋友可以参考下
    2023-05-05
  • 对Python通过pypyodbc访问Access数据库的方法详解

    对Python通过pypyodbc访问Access数据库的方法详解

    今天小编就为大家分享一篇对Python通过pypyodbc访问Access数据库的方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Python Excel vlookup函数实现过程解析

    Python Excel vlookup函数实现过程解析

    这篇文章主要介绍了Python Excel vlookup函数实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Python制作简易版2048小游戏

    Python制作简易版2048小游戏

    2048作为经典的手机端游戏一直深受大家的喜爱,本文将利用Python中的Pygame模块制作简单版的2048游戏,感兴趣的小伙伴可以了解一下
    2022-07-07
  • torch 中各种图像格式转换的实现方法

    torch 中各种图像格式转换的实现方法

    这篇文章主要介绍了torch 中各种图像格式转换的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Python实现语音识别vosk的示例代码

    Python实现语音识别vosk的示例代码

    Vosk是一个功能强大且易于使用的语音识别工具包,它提供了Python绑定,使得在Python中使用Vosk变得非常方便,本文主要介绍了Python实现语音识别vosk的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • Python Pillow.Image 图像保存和参数选择方式

    Python Pillow.Image 图像保存和参数选择方式

    今天小编就为大家分享一篇Python Pillow.Image 图像保存和参数选择方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Python实现进程同步和通信的方法

    Python实现进程同步和通信的方法

    本篇文章主要介绍了Python实现进程同步和通信的方法,详细的介绍了Process、Queue、Pipe、Lock等组件,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01

最新评论