yield 空是什么用法?

2021-03-26 17:58:24 +08:00
 shyrock

关于 yield 的使用,网上能搜到的都是生成器的用法,都以 yield n 的形式返回一个值。 但是我在 odoo 中看到一段代码:

    @classmethod
    @contextmanager
    def manage(cls):
        """ Context manager for a set of environments. """
        if hasattr(cls._local, 'environments'):
            yield
        else:
            try:
                cls._local.environments = Environments()
                yield
            finally:
                release_local(cls._local)

调用语法:

        with odoo.api.Environment.manage():
            with registry.cursor() as cr:
                odoo.tools.trans_export(config["language"],
                    config["translate_modules"] or ["all"], buf, fileformat, cr)

有大佬能指点一下这个 yield 什么用处吗?

971 次点击
所在节点    Python
1 条回复
SjwNo1
2021-03-26 22:32:00 +08:00
因为是 contextmanager,所以 yield 之前的部分相当于__enter__, 之后的逻辑相当于__exit__,这里 yield 返回 None 是因为上下文不需要 as obj

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/765500

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX