Python中的混合生成器/函数

时间:2016-08-16 09:19:00

标签: python-2.7 function return generator yield

在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。那么可以将这两者结合起来吗?

1 个答案:

答案 0 :(得分:1)

它仍然是一个发电机,甚至叫回归。 无论如何,我不会混合发电机/常规功能。

你可以在迭代器上包装一些东西,以防你需要循环遍历结果。

一个可以做你想做的简单代码:

last = None
for last in function(): pass

现在最后一个包含您想要的值,您可以在代码中使用它。

生成器内的返回已添加到Python 3.3 它等同于StopIteration(值)

  

在生成器中返回expr导致引发StopIteration(expr)   从发电机出来后。

     

在生成器中,语句

     

返回值在语义上等同于

     

提高StopIteration(值),除了当前的异常   不能被返回的发生器中的除子句捕获。