【发布时间】:2016-12-22 14:24:21
【问题描述】:
在 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
当在某些情况下我只需要最终结果(例如,将其用作残差函数进行优化)而在其他情况下我需要每次迭代后的增量结果(例如使用微分机器人模型,用每个新的速度命令更新机器人的位姿)。现在我有两个函数,一个有收益,另一个有回报。那么这两者可以结合起来吗?
【问题讨论】:
-
创建一个迭代整个生成器并返回最后一个结果的包装器?!同一个函数可以像生成器和正常函数一样起作用,这似乎很疯狂。分担这个责任。话虽如此,为单个值迭代整个生成器似乎更疯狂。不能直接计算最后一个值,真的分担这两个函数的职责吗?
-
据我所知这是不可能的,因为来自机器人的数据代表周期性的电机编码器刻度(达到 65536 时重置为零)并且需要逐步计算位姿更新,它毕竟被称为“差分”模型。包装器仍然是另一个功能,所以我想知道是否可以进行融合。疯狂并不总是一个坏词:)
-
在您的代码中将
return替换为yield。现在,当您想将该函数用作“简单函数”时,您只需使用next(function(generator=False)),而当您想将其用作生成器时,您将其用作for x in function(generator=True)。
标签: python-2.7 function return generator yield