我有一个名为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
有没有更好的方法来实现同样的目标?
答案 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)
将前一个结果作为下一个函数的参数调用。