• 技术文章 >Python技术 >Python基础教程

    python中如何使用@contextmanage?

    小妮浅浅小妮浅浅2021-03-29 09:54:29原创2056

    本文教程操作环境:windows7系统、Python 3.9.1,DELL G3电脑。

    1、实现逻辑

    (1)初始化一个 _GeneratorContextManager 类,构造方法接受了一个生成器 gen

    (2)这个类实现了上下文管理器协议 __enter__ 和 __exit__

    (3)执行 with 时会进入到 __enter__ 方法,然后执行这个生成器,执行时会运行到 with 语法块内的 yield 处

    (4)__enter__ 返回 yield 的结果

    (5)如果 with 语法块没有发生异常,with 执行结束后,会进入到 __exit__ 方法,再次执行生成器,这时会运行 yield 之后的代码逻辑

    (6)如果 with 语法块发生了异常,__exit__ 会把这个异常通过生成器,传入到 with 语法块内,也就是把异常抛给调用者

    2、使用实例

    Python中,可以使用装饰器 @contextmanager来简化上下文管理器,也就是不需要定义__enter__和__exit__方法。

    class MyContent:
        def query(self):
            print('query data')
    # 需要引入contextmanager
    from contextlib import contextmanager
     
    @contextmanager
    def make_resource():
        print('first connect to resource')
        yield MyContent()
        print('close resource connection')
     
    #应用上下文管理器
    with make_resource() as r:
    r.query()

    以上就是python中使用@contextmanage的方法,大家在操作之前,一定要先就具体的@contextmanage实现逻辑进行了解,然后再展开相关的实例操作。

    专题推荐:python @contextmanage
    上一篇:python中@contextmanager是什么? 下一篇:python描述器是什么?

    相关文章推荐

    • python上下文管理器的基本介绍• python上下文管理器的用法详解• 上下文管理器在python中的原理• python上下文管理器如何解决异常?• python中@contextmanager是什么?

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网