用python计算函数链

用python计算函数链,python,functional-programming,Python,Functional Programming,我想从一个初始值得到一系列计算的结果。我实际上使用了以下代码: def function_composition(function_list, origin): destination = origin for func in function_list: destination = func(destination) return destination 函数列表中的每个函数都有一个参数 我想知道python标准库中是否有类似的函数或更好的方法(例如:

我想从一个初始值得到一系列计算的结果。我实际上使用了以下代码:

def function_composition(function_list, origin):
    destination = origin
    for func in function_list:
        destination = func(destination)
    return destination
函数列表中的每个函数都有一个参数

我想知道python标准库中是否有类似的函数或更好的方法(例如:使用lambdas)来执行此操作。

调用时折叠

destination = reduce((lambda x, y: y(x)), function_list, origin)

这将是一个功能折叠应用程序,采用FP风格。例如,在Haskell
foldr($)中,7[(+1),(^3),(*2)]
的计算结果为
2745
($)
只是
\fx->fx
。因此,
reduce
lambda
将是python的等价物。您的代码清晰简洁-我认为没有理由尝试压缩它。@DonStewart:实际上这是一个函数组合的折叠。@larsmans-取决于您是想折叠组合然后应用,还是只折叠应用
foldr($)x[(+1),(^2)]
vs
foldr(.)id[(+1),(^2)]$x
。请注意,在3.x中,
reduce
functools.reduce()
。我需要反转lambda中的变量:
destination=reduce((lambda x,y:y(x)),函数列表,原点)
。现在它开始工作了。你真的相信这是一种更好的方法吗?@larsmans我当然觉得更容易理解它在做什么,而且它是正确的。如果你重新定义不推荐的
apply
函数:
apply=lambda func,value:func(value);目的地=减少(应用、功能列表、原点)