答案 0 :(得分:2)
a = lambda n: n + 2
b = lambda n: n * 2
def F(*funcs):
def G(*args):
res = funcs[-1](*args)
for f in funcs[-2::-1]:
res = f(res)
return res
return G
>>> F(a, b)(1)
4
或者像@DanielRoseman
这样的reduce
更好
def F(*funcs):
def G(*args):
return reduce(lambda x, y: y(x), funcs[-2::-1], funcs[-1](*args))
return G
>>> F(a, b)(1)
4
你甚至可以在一行中完成它,但我觉得它不那么优雅:
def F(*funcs):
return lambda *args: reduce(lambda x, y: y(x), funcs[-2::-1], funcs[-1](*args))
答案 1 :(得分:2)
你可能想要reduce
:可能是这样的:
reduce(lambda x, y: y(x), [a, b, c, d, e], initial_value)
答案 2 :(得分:1)
这适用于多个输入值,因此您可以拥有lambdas,它们都会获取N
个参数,并返回N
个值。
def F(*funcs):
def _(*arg):
if len(arg) == 1:
arg = arg[0]
for f in reversed(funcs):
arg = f(arg)
else:
for f in reversed(funcs):
arg = f(*arg)
return arg
return _
测试(多个):
a = lambda n,m: (n + m,m)
b = lambda n,m: (n*m,n)
print(F(a,b)(1,2))
>>>
(3, 1)
测试(单曲):
a = lambda n: n + n
b = lambda n: n ** 2
print(F(a,b)(1))
>>>
2