您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 是否有一个有意义的方法来使用发生器内的上下文管理器?

5b51 2022/1/14 8:22:40 python 字数 2533 阅读 578 来源 www.jb51.cc/python

from contextlib import contextmanager @contextmanager def context(): print "entering" yield print "exiting" def test(): with context(): for x in range(10): yield

概述

from contextlib import contextmanager

@contextmanager
def context():
    print "entering"
    yield
    print "exiting"

def test():
    with context():
        for x in range(10):
            yield x

for x in test():
    if x == 5:
        break  # or raise

输出

entering

当循环中断时,有没有办法使python自动调用上下文()的__exit__方法?还是其他一些实现同样目标的方法?我对于生成器和上下文管理器的了解使我怀疑这是不可能的,但是这使得内部管理器在生成器中是没有用的,不是吗?在我看来,一个块中的yield语句应该会引发一个红旗,上下文管理器__exit__可能不会运行.

from contextlib import contextmanager

@contextmanager
def context():
    print "entering"
    try:
        yield
    finally:
        print "exiting"

def test():
    with context():
        for x in range(10):
            yield x

for x in test():
    if x == 5:
        break  # or raise

输出

entering
exiting

编辑:如果您尝试:help(contextmanager),它将显示它的“典型”使用示例,它们用yield / finally子句包装yield.

总结

以上是编程之家为你收集整理的python – 是否有一个有意义的方法来使用发生器内的上下文管理器?全部内容,希望文章能够帮你解决python – 是否有一个有意义的方法来使用发生器内的上下文管理器?所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶