You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:30:07