回顾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:
在您的示例中,
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
:returna * 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
分配给x
,3
分配给y
,函数返回它们的和。在如果我们调用
adder(1)
怎么办?TypeError: <lambda>() missing 1 required positional argument: 'y'
从中可以看出,Python知道lambda函数从其定义中需要多少个输入参数,如果不首先获得所需的所有参数,就无法工作。在
Lambdas只是完整声明的简写。这使得您的示例在功能上与此相同:
lambda是一个函数,当您调用它时,您将为它提供一个参数(在本例中为a)。在
myfunc(3)
的作用是将3赋给n
,然后在lambda表达式中使用这个值。{cd3>变成了表达式。lambda函数有一个自变量a
。当您return lambda a : a * n
时,mytripler
现在充当一个对象(函数),其参数是a
,操作是计算a*3
。最后当你打电话来的时候将11赋给自变量
a
,从而得到33相关问题 更多 >
编程相关推荐