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

使用Lambda更新字典时仅更新最后一个元素的原因探究

问题原因分析

你遇到的问题核心是Python闭包的延迟绑定特性,具体来说:

循环中创建的每个lambda函数并没有在定义时就捕获当前循环的key值,而是持有对变量key的引用。当你后续调用这些lambda函数时,才会去查找key的当前值——但此时循环已经执行完毕,key变量最终停留在字典的最后一个键(也就是示例中的3),所以不管调用acts[1]()还是acts[2](),实际传入add2的都是最后那个key值,导致总是更新字典的最后一个元素。

解决方法

要让每个lambda捕获循环时的当前key值,可以通过以下两种方式:

1. 使用默认参数绑定当前值

修改循环内的lambda定义,把key作为默认参数传入,默认参数会在lambda定义时就完成求值:

for key in dic:
    acts[key] = lambda k=key: add2(dic, k)

2. 使用functools.partial

借助functools.partial直接把当前的key值绑定到函数参数上:

from functools import partial

for key in dic:
    acts[key] = partial(add2, dic, key)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:35:23