<p>到目前为止,我的答案并不比其他任何答案都好,但我想稍微调整一下,从问题中挤出一点函数式编程的精华,只是为了好玩。你知道吗</p>
<pre><code>from functools import reduce
from operator import mul
def functioners(*funcs):
def inner(x):
return reduce(mul, [f(x) for f in funcs], 1)
return inner
In [2]: res = functioners(lambda x: x+1, lambda x: x *2, lambda x: x+3)
In [3]: res(5)
Out[3]: 480
In [4]: res = functioners(lambda x: x+1, lambda x: x +1, lambda x: x+1)
In [5]: res(1)
Out[5]: 8
</code></pre>
<hr/>
<p><strong>编辑</p>
<p>为了实现一种10分钟的讨好尝试,我甚至变得有点疯狂。这不是什么我会让我的同事,但它的晚了,所以我可能只是为了好玩。。。你知道吗</p>
<p>应该可以定义一个函数,它可以不断返回自己的部分应用版本,但我想您需要某种方法来告诉它停止吗?你知道吗</p>
<p>以下是我的尝试:</p>
<pre><code>from functools import partial, reduce
from operator import mul
def functionals(*funcs, finished=None):
def inner(x):
return reduce(mul, [f(x) for f in funcs], 1)
if finished is not None:
# stop condition
return inner
else:
return partial(functionals, *funcs)
</code></pre>
<p>你可以像这样使用它(如果你这么想……)</p>
<pre><code>In [37]: f1 = functionals(lambda x: x+1)
In [38]: f2 = f1(lambda x: x + 1)
In [39]: f3 = f2(lambda x: x + 1, lambda x: x + 1, lambda x: x + 1)
In [40]: f3(finished="definitely!")(1)
Out[40]: 32
</code></pre>
<p>(我现在就去拿帽子和外套……)</p>