提问者:小点点

关于Python中Lambda函数的一个问题


为什么在下面的代码中,输出是22?

在我的理解中,我们有一个函数需要两个参数,但它已经被定义为只用了一个! 但是,当我们第一次在mydoubler=myfunc(2)中使用它时,它将参数(2)分配给变量n,但是当我们第二次在print(mydoubler(11)中使用它时,它使用参数(11)来设置变量a的值!这是为什么呢?Lambda像递归函数一样工作吗?

   def myfunc(n):
        return lambda a : a * n

   mydoubler = myfunc(2)

   print(mydoubler(11))

共3个答案

匿名用户

lambda a:a*n等于:

def somefunction(a):
    return a * n

当您调用myfunc(2)时,您动态地创建了一个函数,该函数与以下函数相同:

def somefunction(a):
    return a * 2

匿名用户

回答你必须写:

return lambda n,a: a*n

然后它就会按照你想要的方式工作。 您仍然必须给它两个参数。

匿名用户

myfunc返回一个函数。 所以myDoubler是一个函数,由lamda:a*2描述。 然后用参数22调用该函数,因此自然会打印出11*2=22。 Lambda函数本身并不是递归的,它们只是编写简单函数的一种较短的方式。 在您的情况下,您还可以写:

def myfunc(n):
    def multiplier(a):
        return a * n

    return multiplier