将lambda存储在字典中
我一直在尝试创建一个字典,字典的每个键都是一个字符串,而每个值都是一个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
的值。