2013-01-19 168 views
11

我一直在试图用每个键的字符串和每个值的lambda函数创建一个字典。我不确定我要去哪里但是我怀疑它是要么我第一次在字典中存储lambda的尝试,或者是我的lambda使用的是快捷操作符。在字典中存储lambdas

代码:

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

所引发的错误是SyntaxError: invalid syntax和我+=指向右侧的。 lambda表达式中不允许快捷操作符,还是比我想象的更偏离轨道?

对于理智的缘故,我省略了数百个非常相似的对(这是不是只是一个很小的字典。)

编辑:

看来我的问题是,试图分配什么在lambda表达式内的。无论如何,我的问题是要解决的问题是如何才能获得一种方法,只知道该字典的关键字能够改变我的(破碎的)代码中定义的字段?

对eval()的某种调用方式有帮助吗?

EDIT_FINAL:

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

回答

24

不能在表达式中使用赋值,而lambda只能使用表达式。

你可以存储在lambda表达式字典就好了,否则:

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

当然,以上仅lambda返回结果,它不会改变就地target.equimentPoisonRatingBonus

+0

有趣的,但现在无论是调用我的lambda,需要知道将结果添加到该特定字段。有什么办法呢? – BlackVegetable

+1

@BlackVegetable:改为使用正确的函数,或者向'target'类中添加一个方法。 –

+0

我在这本词典中有大约150个这些(相似)元素。因此,为每一个使用适当的功能都会破坏这本词典的用途。嗯... – BlackVegetable