
关于 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 什么用处吗?
1 SjwNo1 Mar 26, 2021 因为是 contextmanager,所以 yield 之前的部分相当于__enter__, 之后的逻辑相当于__exit__,这里 yield 返回 None 是因为上下文不需要 as obj |