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

Python Lambda函数如何按值捕获变量?问题解析与解决

问题解惑与解决方案

你的猜测完全正确

Python里的lambda函数在列表推导中捕获的是变量的引用,不是循环迭代时变量的即时值。整个列表推导过程中,key始终是同一个变量,每次循环只是更新它指向的值。等你后续调用y[0]()时,循环已经结束,key最终指向字典键的最后一个元素'f',所以所有lambda执行时都会输出'f'。

修复方法

要让每个lambda记住循环时对应的key值,有两种常用写法:

方法1:用默认参数绑定当前值

默认参数会在函数定义时(也就是每一次循环迭代)计算并绑定当前的key值,而非调用时才查找变量:

y = [lambda key=key: print(key) for key in x.keys()]

这时调用y[0]()会输出'a',y[5]()输出'f'。

方法2:使用functools.partial

partial可以预先帮你绑定函数的参数值:

from functools import partial

y = [partial(print, key) for key in x.keys()]

每个partial对象都会记住当时的key,调用时直接输出对应内容。

额外需求:让索引为k的lambda输出'a'+k

如果要实现y[k]()输出chr(ord('a') + k),可以直接基于索引生成,不用依赖字典的键:

y = [lambda k=k: print(chr(ord('a') + k)) for k in range(6)]

调用y[0]()输出'a',y[2]()输出'c',以此类推。

内容的提问来源于stack exchange,提问作者Jonathan H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:25:02