【发布时间】:2014-10-13 14:34:35
【问题描述】:
我试图找到一种好方法来解释为什么通过调用另一个上下文管理器来创建一个专门的上下文管理器按预期工作。我不是在抱怨!它确实很棒。但在我测试之前我不确定它是否会起作用,因此我觉得我失去了一些东西。
只是为了澄清考虑以下示例:
>>> from contextlib import contextmanager
>>> @contextmanager
... def f(val):
... print(val)
... yield
... print(val+1)
...
>>>
>>> with f(1):
... print(3)
...
1
3
2
现在我们对其进行专门化:
>>> def f42():
... return f(42)
...
>>> with f42():
... print(3)
...
42
3
43
我想让我感到困惑的是为什么 f 的收益率会冒泡到 f42?为什么我不需要明确地将 f42 写为上下文管理器。
【问题讨论】:
标签: python function yield contextmanager