在函数内使用lambda

时间:2019-02-16 19:22:52

标签: python function lambda

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

9 个答案:

答案 0 :(得分:5)

mydoublermyfunc(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

但是当输入是arraystring时,您期望什么?

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

答案 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

在上面的示例中,变量nmyfunc中声明,在您的情况下,nmyfunc的参数,该参数传递给{{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函数是没有名称定义的函数。在那里也称为匿名函数。