python – 是否有一个有意义的方法来使用发生器内的上下文管理器?
发布时间:2021-01-11 11:15:18 所属栏目:Python 来源:互联网
导读:from contextlib import contextmanager@contextmanagerdef context(): print entering yield print exitingdef 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__可能不会运行. 解决方法那么你可以用一个try / finally子句将context()函数中的yield包装起来: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 – Django芹菜使用Ajax检索任务状态
- dict.viewkeys()返回的数据类型是什么? [python 2.7]
- python – 与布尔numpy数组VS PEP8 E712的比较
- 在没有busywait的情况下在python中实现亚毫秒处理
- python – Sublime Text 3 API:从文件获取所有文本
- python – hashlib.md5()TypeError:Unicode对象必须在散列
- 可选的python参数没有破折号但有附加参数?
- python – 基本的openGL,顶点缓冲区和pyglet
- python – 加速解决三角线性系统与numpy?
- python – 为什么pow(x,y)的时间复杂度为O(1),而x ** y为O(
