产量 contextlib.contextmanager
yield in contextlib.contextmanager
为什么我可以跳过在 yield log_func
中调用 log_func,即我可以只写 yield
而代码仍然有效。这是为什么? yield
在这种情况下如何工作?
import time
from contextlib import contextmanager
@contextmanager
def log_exec(log_func):
s = time.perf_counter()
yield log_func
e = time.perf_counter()
log_func(e - s)
with log_exec(log.debug):
time.sleep(1)
This iterator
must yield
exactly one value, which will be bound to the targets in the with
statement’s as
clause, if any.
您没有使用 as
子句,因此结果没有改变。但是,如果您尝试将它与空 yield
一起使用,您将看到生成的值为 None
.
with log_exec(debug) as log_foo:
print(log_foo)
time.sleep(1)
为什么我可以跳过在 yield log_func
中调用 log_func,即我可以只写 yield
而代码仍然有效。这是为什么? yield
在这种情况下如何工作?
import time
from contextlib import contextmanager
@contextmanager
def log_exec(log_func):
s = time.perf_counter()
yield log_func
e = time.perf_counter()
log_func(e - s)
with log_exec(log.debug):
time.sleep(1)
This
iterator
mustyield
exactly one value, which will be bound to the targets in thewith
statement’sas
clause, if any.
您没有使用 as
子句,因此结果没有改变。但是,如果您尝试将它与空 yield
一起使用,您将看到生成的值为 None
.
with log_exec(debug) as log_foo:
print(log_foo)
time.sleep(1)