29

我一直在尝试创建一个字典,其中每个键都有一个字符串,每个值都有一个 lambda 函数。我不确定我哪里出错了,但我怀疑这要么是我首先尝试将 lambda 存储在字典中,要么是我的 lambda 正在使用快捷操作符。

代码:

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

引发的错误是SyntaxError: invalid syntax指向我的+=. lambdas 中是否不允许使用快捷操作符,或者我是否比我想象的更偏离轨道?

为了理智起见,我省略了数百个非常相似的对(这不仅仅是一本小字典。)

编辑:

看来我的问题是尝试在 lambda 表达式中分配任何内容。但是,我要解决的问题是如何获得一个只知道该字典的键的方法才能更改在我的(损坏的)代码中定义的字段?

对 eval() 的某种调用会有所帮助吗?

EDIT_FINAL:

functools.partial() 方法被推荐到问题的这个扩展部分,我相信在研究它之后,我会发现它足以解决我的问题。

4

1 回答 1

51

您不能在表达式中使用赋值,并且 alambda只接受表达式。

您可以将 lambdas 存储在字典中,否则:

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

上面lambda当然只返回结果,它不会target.equimentPoisonRatingBonus就地改变。

于 2013-01-19T23:16:24.247 回答