l3u*_*fly 3 python functional-programming function function-composition
我有一组函数f(x), g(x), s(x), t(x)。
它们被设计为像这样链接在一起:f(g(s(t(x))))
这些函数经过精心设计,可以按任意顺序链接。我的代码的另一部分在列表中构建序列:[f, g, s, t]
有没有一种优雅的方法来获取列表并链接函数调用,获取最后结果的输出?
现在显然我可以使用一个类似外部计数器的变量来跟踪输出和一个简单的for循环增量索引,但我想知道是否有更Pythonic的方法来做到这一点?
Reduce 是完美的答案(尽管我们需要从最里面的函数开始,因此reversed):
import functools
functions = [f, g, s, t]
y = functools.reduce(lambda a, f: f(a), reversed(functions), x)
Run Code Online (Sandbox Code Playgroud)
编辑:使用常数参数,就像这样简单:
p1, p2 = 5, 42
y = functools.reduce(lambda a, f: f(a, p1, p2), reversed(functions), x)
Run Code Online (Sandbox Code Playgroud)