【发布时间】:2016-05-31 02:43:32
【问题描述】:
import contextlib
import time
@contextlib.contextmanager
def time_print(task_name):
t = time.time()
try:
yield
finally:
print task_name, "took", time.time() - t, "seconds."
def doproc():
x=1+1
with time_print("processes"):
[doproc() for _ in range(500)]
# processes took 15.236166954 seconds.
使用这个装饰器时doproc什么时候执行?
【问题讨论】:
-
From the docs: "在生成器 yield 的地方,嵌套在 with 语句中的块被执行。然后在块退出后,生成器被恢复。如果块中出现未处理的异常,它在生成器内重新生成,在产生产生的点。”
-
yield没有参数在语义上等价于yield None
标签: python generator yield contextmanager