Python Lambda示例疑问:调用方式差异及x参数赋值原理
理解Python Lambda闭包的工作逻辑
咱们来一步步拆解这个示例代码,帮你搞明白背后的运行机制~
先看示例代码
>>> def make_incrementor(n): ... return lambda x: x + n ... >>> f = make_incrementor(42) >>> f(0) 42 >>> f(1) 43
逐个解答你的疑问
1. 为何第一次调用是f = make_incrementor(42),后续却不是?
make_incrementor是一个函数工厂——它的作用是创建并返回一个定制好的lambda函数,而不是直接执行加法操作:
- 当你调用
make_incrementor(42)时,你传入的42会被赋值给函数内部的参数n,接着函数返回一个已经“记住”了n=42的lambda函数,最后这个lambda函数被赋值给变量f。 - 后续的
f(0)、f(1)其实是在调用这个已经创建好的lambda函数,而不是再次调用make_incrementor。如果每次都写make_incrementor(42)(0),那确实会每次创建新的lambda实例,但这里我们把创建好的lambda存在f里,复用的是同一个实例,所以它会一直记住n=42。
2. x是如何被赋值,让传入的参数能和它相加?
x是这个lambda函数的形参:
- lambda的定义是
lambda x: x + n,这里的x就是这个匿名函数的输入参数。当你调用f(0)时,0会被传递给x,然后执行0 + 42(这里的42是之前lambda捕获的n的值),得到结果42;调用f(1)时,1赋值给x,执行1 + 42得到43。 - 这里的关键是闭包特性:lambda函数可以捕获外层函数
make_incrementor中的变量n,即使make_incrementor已经执行完毕,lambda依然能保留这个n的值,每次调用时都能使用它。
内容的提问来源于stack exchange,提问作者user9726721
相关产品推荐
相关产品推荐

