在单个函数中组合lambda列表的pythonic方法是什么?例如:
lambdas = [lambda x, k=k: x+k for k in range(3)]
我希望在一个lambda中获得与此类似的所有内容,但无需键入:
f = lambda x: lambdas[2](lambdas[1](lambdas[0](x)))
在单个函数中组合lambda列表的pythonic方法是什么?例如:
lambdas = [lambda x, k=k: x+k for k in range(3)]
我希望在一个lambda中获得与此类似的所有内容,但无需键入:
f = lambda x: lambdas[2](lambdas[1](lambdas[0](x)))
您可以使用functools.reduce
来执行此操作,如下所示:
from functools import reduce
lambdas = [lambda x, k=k: x+k for k in range(3)]
# x = 0
reduce(lambda x, l: l(x), lambdas, x)
# -> l[2](l[1](l[0](x)))
# step_1 : x = x , l = lambda[0] -> lambda[0](x)
# step_2 : x = lambda[0](x), l = lambda[1] -> lambda[1](lambda[0](x))
# step_3 : x = lambda[1](lambda[0](x)), l = lambda[2] -> lambda[2](lambda[1](lambda[0](x)))