在函数内部使用lambda

问题描述 投票:9回答:6

我正在通过在线教程学习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作为参数。谢谢。

python function lambda
6个回答
5
投票

mydoublermyfunc(2)回归的原因。它返回一个接受单个参数a的lambda。

当你调用这样的函数:myfunction(this_argument)时,它将解析为该点所返回的内容。所以这与编写mydoubler = lambda a : a * 2实际上是一样的


4
投票

lambda函数是一个小的匿名函数。在你的例子中

myfunc(2) # lambda a: a * 2

您将其翻译为在每个输入元素上应用函数。例如,当输入只是一个标量时,这是非常明显的

mydoubler(11) #outputs 11 * 2 = 22

但是当输入是arraystring时,你期待什么?

mydoubler([1,1,1]) #outputs [1,1,1] * 2 = [1,1,1,1,1,1]
mydoubler("str") #outputs "str" * 2 = "strstr"

1
投票

正如Python文档所说,lambda只是匿名函数

Lambda表达式(有时称为lambda表单)用于创建匿名函数。表达式lambda参数:expression产生一个函数对象。

你可以在here看到它

在你的代码片段中发生的是你的myfunc函数使用n作为新的匿名函数的常量,该函数接收一个名为a的参数并返回an的乘法。在你的调用n值是2,结果你的调用myfunc(2)。当你调用mydoubler(11)时,当a具有值11时,你会调用你的新匿名函数


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
  • 但是在这里,因为我们已经在调用myfun()时传递了n = 2,因此做mydoubler(a)只返回一个* 2(因为这里n = 2),因此结果。

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

在上面的例子中,变量nmyfunc中声明,在你的情况下,nmyfunc的参数,传递给lambda函数。函数myfunc返回lambda函数,n等于参数,你通过函数调用传递给myfunc。所以函数调用myfunc(2)返回功能lambda a: a * 2


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))
© www.soinside.com 2019 - 2024. All rights reserved.