在Python中有可能有一个在循环中产生值的生成器,或者被称为正常函数,其中返回该循环的最终值?我尝试将标志设置为参数,然后根据该标志选择产生或返回。但是函数中仅存在关键字yield会将其自动转换为生成器,Python会抱怨生成器中存在return语句。
这是一个这样的功能的例子:
def function(generator=True):
a = 0
for i in range(10):
a = i
if generator:
yield a
if not generator:
return a
在某些情况下,我只需要最终结果(例如,将其用作优化的残差函数),这样的函数对我有用,而在其他情况下,我需要在每次迭代后使用增量结果(例如使用差分)机器人的模型,用每个新的速度命令更新机器人的姿势)。现在我有两个函数,其中一个有yield,另一个有return。那么可以将这两者结合起来吗?
答案 0 :(得分:1)
它仍然是一个发电机,甚至叫回归。 无论如何,我不会混合发电机/常规功能。
你可以在迭代器上包装一些东西,以防你需要循环遍历结果。
一个可以做你想做的简单代码:
last = None
for last in function(): pass
现在最后一个包含您想要的值,您可以在代码中使用它。
生成器内的返回已添加到Python 3.3 它等同于StopIteration(值)
在生成器中返回expr导致引发StopIteration(expr) 从发电机出来后。
在生成器中,语句
返回值在语义上等同于
提高StopIteration(值),除了当前的异常 不能被返回的发生器中的除子句捕获。