为什么在下面的代码中,输出是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))
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