美文网首页
Python 中如何简化with语句中的上下文管理

Python 中如何简化with语句中的上下文管理

作者: 逸筱幻 | 来源:发表于2018-04-27 10:48 被阅读0次

    使用with语句时,通常需要定义一个类,并且实现 __enter__ 和 __exit__方法。这样就导致了代码很冗长。
    而且为了使用with,必须定义一个类,这样会使代码的可读性并不太好。
    下面使一个例子

    class Case():
        def __enter__():
            return "result"
    
        def __exit__():
            return True
    
    //调用方案
    with Case() as case:
      print(case);// -> result
    

    对于类似的情况。Python提供了contextlib内置函数库,用于简化上下文管理器的编写

    import contextlib
    
    @contextlib.contextmanager
    def Case():
        print("__enter__")
        yield "result"
        print("__exit__")
    
    #调用方案
    with Case() as case:
      print(case)
    #  __enter
    #  result
    #  __exit__
    

    这种方案的关键是yield语句。yield语句之后为 __exit__的实现,剩下的代码为__enter__的实现。

    相关文章

      网友评论

          本文标题:Python 中如何简化with语句中的上下文管理

          本文链接:https://www.haomeiwen.com/subject/twhblftx.html