python中的顺序函数映射

python中的顺序函数映射,python,itertools,Python,Itertools,我在列表中有一系列函数: funcs = [f1, f2, f3, f4, f5] 所有的函数都返回一个参数,例如 f1 = lambda x: x*2 我想把所有这些函数映射到一起 result = lambda x: f5(f4(f3(f2(f1(x))))) 或者,迭代funcs def dispatch(x): for f in funcs: x = f(x) return x dispatch工作正常,但我无法找到使用iterools的干净方法。

我在列表中有一系列函数:

funcs = [f1, f2, f3, f4, f5]
所有的函数都返回一个参数,例如

f1 = lambda x: x*2
我想把所有这些函数映射到一起

result = lambda x: f5(f4(f3(f2(f1(x)))))
或者,迭代
funcs

def dispatch(x):
    for f in funcs:
        x = f(x)
    return x

dispatch
工作正常,但我无法找到使用
iterools
的干净方法。可能吗?这个顺序函数映射习惯用法有名字吗?

在这里使用
itertools没有意义;您正在生成一个输出,无法将其应用于无限可数。在输入iterable中必须有有限数量的函数才能使其工作

使用:

在Python2和Python3中,都有助于上述工作

reduce()
,连同
map()
filter()
,是的,
itertools
,是中经常使用的工具。

查看Martijn答案的另一种(效率较低,唉)方法是认识到您想要组成函数列表

# function composition: compose(f,g)(x) = f(g(x))
def compose(f, g):
    return lambda x: f(g(x))

# Identity for function composition
# compose(f, identity)(x) = f(x)
identity = lambda x: x

# result(x) = f1(f2(...fn(x)...))
result = reduce(compose, funcs, identity)
# function composition: compose(f,g)(x) = f(g(x))
def compose(f, g):
    return lambda x: f(g(x))

# Identity for function composition
# compose(f, identity)(x) = f(x)
identity = lambda x: x

# result(x) = f1(f2(...fn(x)...))
result = reduce(compose, funcs, identity)