在python中递归调用函数列表?

时间:2016-03-21 19:44:55

标签: python recursion

我有一个名为func_list的函数列表。

我想逐个执行它们,func_list[index]的执行结果必须作为参数传递给func_list[index + 1],依此类推。

我想出了这段代码:

def func(arg, index):
    while index < 10:
        res = func_list[index](arg)
        res = func(res, index+1)
    return res

有没有更好的方法来实现同样的目标?

1 个答案:

答案 0 :(得分:2)

这是functools.reduce的用途。

from functools import reduce

reduce(lambda a,b: b(a), func_list, FIRST_ARG)

这将运行

func_list[n](func_list[n-1](... func_list[0](FIRST_ARG) ... ))

functools.reduce有两个参数(可选择三分之一)。第一个参数是返回值的二元函数,第二个参数是要传递给二元函数的值的可迭代值,可选的第三个参数是放在该列表之前的值(作为第一个参数的第一个参数二元函数)。

上一个函数调用的结果以a的形式给出下一个函数调用,以及可迭代中的下一个项b。因此lambda a,b: b(a)将前一个结果作为下一个函数的参数调用。