将lambda存储在字典中

34 投票
1 回答
47750 浏览
提问于 2025-04-17 13:16

我一直在尝试创建一个字典,字典的每个键都是一个字符串,而每个值都是一个lambda函数。我不太确定我哪里出错了,但我怀疑可能是我试图把lambda存储在字典里,或者是因为我的lambda使用了快捷操作符。

代码:

dict = {
    'Applied_poison_rating_bonus': 
        (lambda target, magnitude: target.equipmentPoisonRatingBonus += magnitude)
}

出现的错误是 SyntaxError: invalid syntax,错误指向我的 +=。请问在lambda中不允许使用快捷操作符吗?还是说我偏离了正确的方向?

为了简化问题,我省略了数百对非常相似的键值对(这可不是一个小字典)。

编辑:

看来我的问题在于试图在lambda表达式中赋值 任何东西。不过,我现在要解决的问题是,如何让一个只知道这个字典键的方法能够修改我(出错的)代码中定义的那个字段?

调用eval()会有帮助吗?

最终编辑:

有人推荐使用functools.partial()方法来解决这个问题,我在研究之后相信这个方法足以解决我的问题。

1 个回答

57

你不能在一个表达式里使用赋值操作,而一个 lambda 只接受表达式。

不过,你可以把 lambda 存放在字典里,这样是没问题的:

dict = {'Applied_poison_rating_bonus' : (lambda target, magnitude: target.equipmentPoisonRatingBonus + magnitude)}

上面的 lambda 只是返回结果,它不会直接改变 target.equimentPoisonRatingBonus 的值。

撰写回答