我们如何得到120的输出?
我不太明白函数中的x(y)是什么。哪些参数被传递到哪个函数?
def combinator(y):
return (lambda x: lambda y: x(y))(lambda x:y)
print(combinator(lambda x: x*10)(11)(12))
Lambda 函数与普通
def
函数非常相似,但没有(直接)为其分配名称。以下定义是等效的:
foo = lambda x: y
def foo(x):
return y
这样,我们可以将代码转换为使用标准函数,以便更加清晰。
让我们一步一步来de-lambdify:
def combinator(y):
return (lambda x: lambda y: x(y))(lambda x:y)
步骤 1 -
(lambda x:y)
def combinator(y):
def f1(x):
return y
return (lambda x: lambda y: x(y))(f1)
步骤 2 -
(lambda x: lambda y: x(y))
def combinator(y):
def f1(x):
return y
def f2(x):
return lambda y: x(y)
return (f2)(f1)
步骤 3 -
lambda y: x(y)
def combinator(y):
def f1(x):
return y
def f2(x):
def f3(y):
return x(y)
return f3
return (f2)(f1)
步骤 4 -
combinator(lambda x: x*10)(11)(12)
def f4(x):
return x*10
print(combinator(f4)(11)(12))
这应该会让跟踪正在发生的事情变得更加容易。