首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >contextlib.contextmanager产率

contextlib.contextmanager产率
EN

Stack Overflow用户
提问于 2020-11-13 11:26:54
回答 1查看 175关注 0票数 3

为什么我可以跳过在log_func中调用yield log_func,即我只需要编写yield,而代码仍然有效。为什么会这样呢?在这种情况下,yield是如何工作的?

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-13 12:14:03

摘录自文档

iterator必须精确地包含一个值,如果有yield语句的as子句,则该值将绑定到with语句中的目标。

您没有使用as子句,因此结果没有改变。但是,如果您尝试将其与空的yield一起使用,您将看到生成的值是None

代码语言:javascript
复制
with log_exec(debug) as log_foo:
    print(log_foo)
    time.sleep(1)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64820090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档