在python中调用函数链的更好方法是什么?

Com*_*low 4 python

我有一系列操作需要一个接一个地发生,每个操作都依赖于前一个函数的输出.

像这样:

out1 = function1(initial_input)
out2 = function2(out1)
out3 = function3(out2)
out4 = function4(out3)
Run Code Online (Sandbox Code Playgroud)

等约10次.它在代码中看起来有点难看.

写它的最佳方法是什么?有没有办法使用一些函数编程魔术处理它?有没有更好的方法来调用和执行这个功能链?

fal*_*tru 5

使用循环:

out = initial_input
for func in [function1, function2, function3, function4]:
    out = func(out)
Run Code Online (Sandbox Code Playgroud)


Nic*_*bey 5

您可以使用 functools.reduce:

out = functools.reduce(lambda x, y : y(x), [f1, f2, f3, f4], initial_value)

引用 functools.reduce 文档:

将两个参数的函数从左到右累积应用于序列的项,从而将序列减少到单个值。例如,reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) 计算 ((((1+2)+3)+4)+5)。如果initial 存在,它在计算中放在序列的项之前,并在序列为空时作为默认值。

在这里,我们使用函数可以被视为 Python 中的任何变量的事实,以及一个简单地“将 x 应用于函数 y”的匿名函数。

这种“reduce”操作是一个非常通用的模式的一部分,该模式已成功应用于并行化任务(参见http://en.wikipedia.org/wiki/MapReduce)。