为什么 lambda 在 lambda return 函数中?

Why lambda within lambda return a function?

b = lambda x: (lambda x: x)
print(b(88))

为什么 python 代码打印函数而不是 88? 为什么这与下面的代码不同?

b = lambda x:c(x)

c = lambda x:x

print(b(88))
b = lambda x: (lambda x: x)

您的代码等同于:

def b(x):   # <- This "x" is not used
    def anonymous(x):
        return x;
    return anonymous

所以你可以这样称呼它:

>>> b("anything")(88)
88

此代码:

c = lambda x:x
b = lambda x:c(x)

相当于:

def c(x):
    return x

def b(x):
    return c(x)

因此,如果您调用 b(88),它将调用 c(88) 和 return 结果。 c(88) 只是 returns 88.

函数是 python 中的第一个 class 个对象。这意味着它们可以被视为值。在您的例子中,您的 b 函数正在返回一个函数(我们称它为 c)。请注意,我去掉了 b 函数中的 x 参数,因为它没用。

b = lambda: (lambda x: x)
c = b()

现在你可以调用 c,因为它是一个函数(c 需要一个参数,x):

print(c(88)) # this prints 88

谢谢大家的帮助。我想我已经掌握了窍门:

b = lambda x: (lambda x: x)

相当于:

def lambda_1(x):
    def lambda_2(x):
        return x
    return lambda_2

b = lambda_1

b = lambda x: (lambda x: x)(x)

相当于:

def lambda_1(x):
    def lambda_2(x):
        return x
    return lambda_2(x)
b = lambda_1