lambda是如何工作的?
我正在通过官方Python网站的教程学习Python,遇到了这个例子:
>>> def make_incrementor(n):
... return lambda x: x + n
...
>>> f = make_incrementor(42)
>>> f(0)
42
>>> f(1)
43
请问x
的值是从哪里来的?我对lambda的用法不太熟悉,虽然我对JavaScript中的匿名函数理解得不错,但这个让我有点困惑。有没有人能帮我解释一下?我会很感激的。
8 个回答
1
免责声明:我几乎没有Python的基础。这些内容是基于我对Scheme和λ演算的理解。
make_incrementor是一个用来创建函数的函数。调用make_incrementor(42)会返回一个新的函数,这个函数里面有一个变量x和一个值为42的变量n。当你调用这个新函数f时,传入的参数会替换掉之前绑定的变量。
4
首先,这里有一个用JavaScript写的例子:
function makeIncrementor(n) {
return function (x) {return x + n}
}
一个lambda表达式由三个部分组成。
- 第一个是单词
lambda
(在JavaScript中是function
) - 第二个是参数列表(在JavaScript中是
(...)
里面的部分) - 第三个是要计算的表达式(在JavaScript中是
{...}
里面的部分,自动返回结果)
参数列表是冒号前面的部分。这些参数在表达式的范围内是可以使用的。表达式计算的结果会作为函数的返回值。
和JavaScript不同的是,lambda只能包含一个表达式;你不能用lambda来创建一个匿名的多行函数。
5
想象一下,f
是通过 make_incrementor
这个函数创建的一个对象。
它是一个叫做“匿名函数”的东西,也就是我们常说的 lambda。
>>> f= lambda x: x+42
>>> f(10)
52
当我们把一个值传给 f
时,x
的值就出现了。