Python 减少相反:通过调用先前返回值的函数来生成值

Now*_*ick 5 python function higher-order-functions

我想知道Python(2.7)中是否有与reduce函数相反的东西。我知道减少工作如下:

reduce( lambda x,y : x+y, [1,2,3,4,5]) == 15.
Run Code Online (Sandbox Code Playgroud)

它接受第一个参数和第二个参数,并从第一个参数调用函数,然后它接受结果和列表中的下一项并再次调用该函数。

我想做相反的事情 - 从一个元素生成列表。可能是:

reduce_opposite( lambda x: x**2, 3, n_times=3) == [(3 ** 2), (9 ** 2), (81 ** 2)]
Run Code Online (Sandbox Code Playgroud)

接受一个函数、一个初始参数,并将n该初始参数作为函数的输入的东西。然后将结果存储在列表中,并再次调用函数,但使用上次调用的结果。

Python中有类似的东西吗?如果不是……只是出于好奇,任何语言中都有类似的东西吗?你怎么称呼它?我正在寻找非常短的东西。我可以编写自己的复杂函数来执行此操作。

Ale*_*ley 6

据我所知,没有内置函数可以执行此操作,但编写一个生成器(或类似的东西)来执行相同的操作非常简单。例如:

def reduce_opposite(fn, start, n_times=3):
    for _ in range(n_times):
        start = fn(start)
        yield start
Run Code Online (Sandbox Code Playgroud)

然后:

>>> list(reduce_opposite(lambda x: x**2, 3, n_times=3))
[9, 81, 6561]
Run Code Online (Sandbox Code Playgroud)

生成器在调用之间保留其局部变量这一事实使这成为可能。