• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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 with关键字,上下文管理器,@contextmanager文件操作示例
    上一篇:python tkinter实现下载进度条及抖音视频去水印原理
    下一篇:python上下文管理器异常问题解决方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    python中@contextmanager实例用法 python,中,@contextmanager,实例,