我想问一个关于函数如何分配给变量的问题
我是Python初学者,学习函数
考虑下面的代码块def myfunc(n):
return lambda a : a * n
mydoubler = myfunc(2)
print(mydoubler(11))
我知道lambda
是一个匿名函数,只有一个表达式被计算和返回
这显示在myfunc(n)
中:
return lambda a: a * n
myfunc
接受一个参数,在本例中为2,因此任何数a
都将加倍
然而,我在这里感到困惑
在这方面:
mydoubler = myfunc(2)
我以为我们将myfunc
的结果分配给mydoubler
,但在print语句中:
print(mydoubler(11))
我们正在传递一个参数11
,但我们从未在函数声明的任何地方指定参数a
python代码如何知道print语句中的11
与a
关联
由
lambda a: a * n
创建的函数是一个闭包。当函数被称为mydoubler(11)
时,它使用11
作为a
的值,使用2
(计算lambda a: a * n
时n
内部myfunc
的值)作为n
的值mydoubler
的行为就好像它被定义为您可以看到值
2
存储在函数中,使用了一些挖掘:(事实上,您可以改变这一点,尽管您只有在希望代码变得极其复杂的情况下才会这样做:
)
来自
myfunc(2)
的返回值等效于此lambdalambda接受1个参数,并将其加倍。在本例中,当您调用它时,通过将它赋给名称
mydoubler
,您传递给它的任何参数都是a
,lambda接受的一个参数等效代码:
在这种情况下,您实际上将doubler函数分配给了
mydoubler
:您还指定了参数
a
,namly 2。因此,当您向mydoubler()
函数传递一个数字时,Python知道您已经指定了n
相关问题 更多 >
编程相关推荐