我有一系列操作需要一个接一个地发生,每个操作都依赖于前一个函数的输出.
像这样:
out1 = function1(initial_input)
out2 = function2(out1)
out3 = function3(out2)
out4 = function4(out3)
Run Code Online (Sandbox Code Playgroud)
等约10次.它在代码中看起来有点难看.
写它的最佳方法是什么?有没有办法使用一些函数编程魔术处理它?有没有更好的方法来调用和执行这个功能链?
使用循环:
out = initial_input
for func in [function1, function2, function3, function4]:
out = func(out)
Run Code Online (Sandbox Code Playgroud)
您可以使用 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)。