2013-01-19 94 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