Lambda函数如何获得其价值?

时间:2019-01-02 17:06:57

标签: python lambda

在回顾W3Schools Python教程时,我对他们的lambda示例感到困惑。

变量“ a”的值从何而来?当然,“ a”是lambda-但是它从哪里得到值?

def myfunc(n):
  return lambda a : a * n

mytripler = myfunc(3)

print(mytripler(11))

如果我自己调用print(myfunc(3)),则会收到错误消息。仅当该功能被另一个功能调用时,该功能才起作用。 lambda如何知道这一切?

我担心我缺少关于lambda函数的一些基本知识。

3 个答案:

答案 0 :(得分:5)

Lambda只是完整声明的简写形式。这使您的示例在功能上与此相同:

def myfunc(n):
  def inner(a):
    return a * n
  return inner

lambda是一个函数,当您调用它时,会为其提供一个参数(在此示例中为a)。

答案 1 :(得分:3)

myfunc(3)的作用是将3分配给n,然后在lambda表达式中使用此值。因此表达式变为3*a。您的lambda函数具有一个自变量a。当您return lambda a : a * n时,您的mytripler充当对象(函数),其参数为a,并且操作是计算a*3。所以最后,当您致电

mytripler(11)

您将11分配给自变量a,从而得到33

答案 2 :(得分:1)

在您的示例中,

a被分配了值11。

认为lambda函数的定义是“给定输入时,将其返回”。您可以输入任何名称,因此我们将其命名为x。 lambda x : x + 1的意思是“给定我们将称为x的输入:返回x + 1”。

您有一个额外的函数层返回lambda,但是如果我们将其分解,myfunc的目的是动态生成lambda函数。调用myfunc(3)时,您手中拥有的是一个lambda函数,看起来像这样:lambda a : a * 3。这就是变量mytripler所包含的内容。如果您使用print(mytripler),则会看到类似以下内容的内容:<function myfunc.<locals>.<lambda> at 0x...>,它告诉您这是一些lambda函数。 mytripler包含一个函数,而不是一个值。

此lambda函数有什么作用?它说:“给定一个我们称为a的输入参数:返回a * 3”。

您如何使用函数?你叫他们!并随调用一起发送任何参数。我们的lambda函数需要几个参数?但是,在lambda函数定义中,有许多变量在冒号之前,在这种情况下为a。因此,我们通过发送一个参数mytripler来调用存储在mytripler(11)中的lambda。 11是lambda函数的输入,该函数首先分配给a并返回a * 3 -> 33

您可能有一个lambda,它需要2个输入,我们将其称为xyadder = lambda x, y : x + y 这个lambda做什么?它说:“给定2个我们称为xy的输入:返回它们的总和”。你怎么称呼它?您必须使用两个参数调用adderadder(2,3)返回5。将2分配给x,将3分配给y,然后该函数返回它们的总和。

如果我们叫adder(1)怎么办? TypeError: <lambda>() missing 1 required positional argument: 'y'

由此您可以看到Python知道lambda函数从其定义中期望有多少个输入参数,并且如果不先获取其所需的所有参数就无法工作。