我想知道在Python(2.7)中是否存在与减少函数相反的东西。我知道reduce的工作方式如下:
reduce( lambda x,y : x+y, [1,2,3,4,5]) == 15.
它接受第一个参数和第二个参数,并从第一个参数调用函数,然后它接受结果和列表中的下一个项目并再次调用该函数。
我想做相反的事情 - 从一个元素生成列表。可能是:
reduce_opposite( lambda x: x**2, 3, n_times=3) == [(3 ** 2), (9 ** 2), (81 ** 2)]
接受函数,初始参数和n
的东西,并将此初始参数作为函数的输入。然后将结果存储在列表中,并再次调用函数,但是使用上一次调用的结果。
Python中有这样的东西吗?如果不是......只是出于好奇,在任何语言中都有这样的东西吗?你怎么称呼它?我正在寻找一些非常短的东西。我可以写我自己的函数复杂,这样做。
答案 0 :(得分:3)
据我所知,没有内置功能可以做到这一点,但编写一个生成器(或类似的东西)做同样的技巧非常简单。例如:
def reduce_opposite(fn, start, n_times=3):
for _ in range(n_times):
start = fn(start)
yield start
然后:
>>> list(reduce_opposite(lambda x: x**2, 3, n_times=3))
[9, 81, 6561]
生成器在调用之间保持其局部变量的事实使这成为可能。