【发布时间】:2021-10-16 20:39:56
【问题描述】:
我从另一个项目中继承了一些相当有缺陷的代码。其中一个函数是来自库的回调(draw_ui 方法),其中包含一个 yield 语句。我想知道如果您不在迭代器上下文中使用它来返回值,那么在 python 中使用 yield 的目的是什么。它有什么可能的好处?
def draw_ui(self, graphics):
self._reset_components()
imgui.set_next_window_size(200, 200, imgui.ONCE)
if imgui.begin("Entity"):
if not self._selected:
imgui.text("No entity selected")
else:
imgui.text(self._selected.name)
yield
imgui.end() # end entity window
【问题讨论】:
-
它看起来像是上下文管理器的一部分,因为它有一个
begin(),后跟yield,后跟end()。 -
一般情况下,您可以使用
yield将函数的工作分成几部分,返回一个您不使用的迭代器,然后使用next()强制执行继续。这将允许您清理函数完成时所做的任何事情。这是一个相当笨拙的方法,但它可能是预期的。 -
yield的存在使它成为一个生成器函数,它在调用时返回一个generator的实例(它是一个迭代器)。问题是,那个迭代器是干什么用的?