lambda函数如何获得它的值?

2024-06-16 13:20:02 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

mytripler = myfunc(3)

print(mytripler(11))

如果我单独调用print(myfunc(3)),就会得到一个错误。只有当另一个函数调用该函数时,该函数才有效。兰达a怎么知道这些?在

我担心我遗漏了一些关于lambda函数的非常基本的东西。在


Tags: lambda函数示例returndef错误教程myfunc
3条回答

在您的示例中,a被赋值为11。在

将lambda函数的定义想象为“当给定输入时,返回this”。您可以将输入命名为任何名称,因此我们将其命名为x。lambda x : x + 1的意思是“给定一个我们将调用x:returnx + 1”。在

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

这个lambda函数做什么?它说“给定一个我们将调用a:return a * 3”的输入参数。在

你用函数做什么?你给他们打电话!并在调用时发送任何参数。我们的lambda函数需要多少个参数?但是在lambda函数定义中,有许多变量位于冒号之前,在本例中是一个:a。因此,我们通过发送一个参数来调用存储在mytripler中的lambda:mytripler(11)。11是lambda函数的输入,该函数首先分配给a,然后返回a * 3 -> 33。在

您可以有一个lambda,它接受两个输入,我们将其称为x和{}: adder = lambda x, y : x + y 这个兰姆达是干什么的?它说“给定两个输入,我们将调用x和{}:返回它们的和”。你怎么称呼它?您必须使用两个参数调用adder,这两个参数:adder(2,3)返回{}。2分配给x3分配给y,函数返回它们的和。在

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

从中可以看出,Python知道lambda函数从其定义中需要多少个输入参数,如果不首先获得所需的所有参数,就无法工作。在

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

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

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

myfunc(3)的作用是将3赋给n,然后在lambda表达式中使用这个值。{cd3>变成了表达式。lambda函数有一个自变量a。当您return lambda a : a * n时,mytripler现在充当一个对象(函数),其参数是a,操作是计算a*3。最后当你打电话来的时候

mytripler(11)

将11赋给自变量a,从而得到33

相关问题 更多 >