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)