我正在通过在线教程学习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作为参数。谢谢。
mydoubler
是myfunc(2)
回归的原因。它返回一个接受单个参数a
的lambda。
当你调用这样的函数:myfunction(this_argument)
时,它将解析为该点所返回的内容。所以这与编写mydoubler = lambda a : a * 2
实际上是一样的
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"
正如Python文档所说,lambda只是匿名函数
Lambda表达式(有时称为lambda表单)用于创建匿名函数。表达式lambda参数:expression产生一个函数对象。
你可以在here看到它
在你的代码片段中发生的是你的myfunc
函数使用n
作为新的匿名函数的常量,该函数接收一个名为a
的参数并返回a
与n
的乘法。在你的调用n
值是2
,结果你的调用myfunc(2)
。当你调用mydoubler(11)
时,当a
具有值11
时,你会调用你的新匿名函数
def mydoubler(a, n):
return a*n
您的示例有两个函数:外部函数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
的参数,传递给lambda
函数。函数myfunc
返回lambda
函数,n
等于参数,你通过函数调用传递给myfunc
。所以函数调用myfunc(2)
返回功能lambda a: a * 2
。
这里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))