用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风格。例如,在Haskellfoldr($)中,7[(+1),(^3),(*2)]
的计算结果为2745
($)
只是\fx->fx
。因此,reduce
和lambda
将是python的等价物。您的代码清晰简洁-我认为没有理由尝试压缩它。@DonStewart:实际上这是一个函数组合的折叠。@larsmans-取决于您是想折叠组合然后应用,还是只折叠应用foldr($)x[(+1),(^2)]
vsfoldr(.)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);目的地=减少(应用、功能列表、原点)
。