这个嵌套 lambda 函数是如何工作的?

问题描述 投票:0回答:1

我们如何得到120的输出?

我不太明白函数中的x(y)是什么。哪些参数被传递到哪个函数?

def combinator(y):
  return (lambda x: lambda y: x(y))(lambda x:y)

print(combinator(lambda x: x*10)(11)(12))
python lambda higher-order-functions
1个回答
0
投票

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))

这应该会让跟踪正在发生的事情变得更加容易。

© www.soinside.com 2019 - 2024. All rights reserved.