我正在通过在线教程学习python中的lambda函数。我了解它的工作原理,但遇到了一个使我感到困惑的示例(在此页面https://www.w3schools.com/python/python_lambda.asp上):
def myfunc(n):
return lambda a : a * n
mydoubler = myfunc(2)
print(mydoubler(11))
我不明白“ mydoubler”功能在这里如何工作。当我们之前没有定义11时,如何将其作为参数。 谢谢。
答案 0 :(得分:5)
mydoubler
是myfunc(2)
返回的内容。它返回一个接受单个参数a
的lambda。
当您调用如下函数:myfunction(this_argument)
时,它将解析为该位置返回的内容。因此,这实际上与编写mydoubler = lambda a : a * 2
答案 1 :(得分:4)
lambda
函数是一个小的匿名函数。在您的示例中
myfunc(2) # lambda a: a * 2
将其翻译为在每个输入元素上应用功能。例如,当输入只是标量时,这很明显
mydoubler(11) #outputs 11 * 2 = 22
但是当输入是array
或string
时,您期望什么?
mydoubler([1,1,1]) #outputs [1,1,1] * 2 = [1,1,1,1,1,1]
mydoubler("str") #outputs "str" * 2 = "strstr"
答案 2 :(得分:1)
正如Python文档所述,lambda只是匿名函数
Lambda表达式(有时称为lambda形式)用于创建匿名函数。表达式lambda参数:表达式产生一个函数对象。
您可以在here
中看到它代码段中发生的事情是您的myfunc
函数使用n
作为新匿名函数的常量,该匿名函数接收一个称为a
的参数并返回{{ 1}}和a
。
在您的通话n
中,值为n
,这是您的通话2
产生的。
当您调用myfunc(2)
时,您会在mydoubler(11)
的值为a
答案 3 :(得分:1)
根据https://pythonreference.readthedocs.io/en/latest/docs/operators/lambda.html中的lambda文档
lambda返回一个匿名函数。
在上述示例中,lambda函数为lambda a:a * n和 lambda本身会返回一些匿名函数,该函数必须类似于
def mydoubler(a, n):
return a*n
答案 4 :(得分:1)
您的示例具有两个功能:外部功能myfunc
和内部功能lambda
。通常,您可以直接调用lambda
函数:
n = 2
print((lambda a: a * n)(11))
# 22
或者您可以为该函数分配一些变量,然后通过此变量进行调用:
inner = lambda a: a * n
print(inner(11))
# 22
您还可以定义一些外部函数,这些函数将返回内部lambda
函数:
def myfunc():
n = 2
return lambda a: a * n
mydoubler = myfunc()
print(mydoubler(11))
# 22
等效于:
mydoubler = lambda a: a * 2
print(mydoubler(11))
# 22
在上面的示例中,变量n
在myfunc
中声明,在您的情况下,n
是myfunc
的参数,该参数传递给{{1} }函数。函数lambda
返回带有myfunc
等于参数的lambda
函数,您通过函数调用将其传递给n
。因此,函数调用myfunc
返回函数myfunc(2)
。
答案 5 :(得分:0)
此处mydoubler = myfunc(2) #myfunc(2)将lambda函数返回给mydoubler
mydoubler=lambda a:a*2
# it is similar to x=lambda a:a*2
print(mydoubler(11)
# it is similar to print(x(11))
答案 6 :(得分:0)
在为mydoubler分配函数后调用该函数时,它返回一个函数lambda FUNCTION,因此,mydoubler本身成为一个函数,可以在参数中传递。
答案 7 :(得分:0)
有同样的问题并通过谷歌搜索登陆这里。一开始似乎很难,但一旦理解就一目了然。
myfunc 定义了一个带有未知参数 n 的 lambda 函数。
mydoubler 定义了一个使用 myfunc with 的 lambda 函数,给参数 n=2 赋值。
记住 mydoubler 仍然是一个 lambda 函数,所以它需要变量才能工作,这里是在打印函数 a=11 中。
答案 8 :(得分:-2)
要理解此概念,可以将上面的代码简化如下:
modal.style.display = "block";
这仅仅是因为lambda本身就是一个函数。 myfunc(2)被调用并存储在mydoubler中。 myfunc(2)也与lambda共享参数,即2。 Lambda和mydoubler通过myfunc(2)连接。当调用mydoubler并以相同的参数传递给lambda时,将自动调用Lambda函数。
Lambda函数是没有名称定义的函数。在那里也称为匿名函数。