2013-01-19 11 views
11

Ho cercato di creare un dizionario con una stringa per ogni chiave e una funzione lambda per ogni valore. Non sono sicuro di dove sto andando male, ma sospetto che sia il mio tentativo di memorizzare un lambda in un dizionario, o il fatto che il mio lambda stia usando un operatore di collegamento.Memorizzazione di lambda in un dizionario

Codice:

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

L'errore viene sollevata è SyntaxError: invalid syntax e che punta verso destra alla mia +=. Gli operatori di scorciatoia non sono ammessi in lambda, o sono ancora più lontano di quanto pensassi?

Per motivi di sanità mentale, ho omesso centinaia di coppie molto simili (Non si tratta solo di un dizionario molto piccolo.)

EDIT:

Sembra che il mio problema era con il tentativo di assegnare nulla all'interno di un'espressione lambda. Tuttavia, il mio problema da risolvere è quindi come posso ottenere un metodo che conosca solo la chiave di questo dizionario per poter modificare quel campo definito nel mio codice (rotto)?

Sarebbe un modo di chiamare eval()?

EDIT_FINAL:

Il metodo functools.partial() è stato consigliato a questa parte estesa della questione, e credo che dopo la ricerca, lo troverò sufficiente a risolvere il mio problema.

risposta

24

Non è possibile utilizzare i compiti in un'espressione e un numero lambda accetta solo un'espressione.

È possibile memorizzare lambda nei dizionari bene altrimenti:

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

È possibile che questo lambda ovviamente restituisce solo il risultato, non altererà target.equimentPoisonRatingBonus sul posto.

+0

Interessante, ma ora qualunque cosa stia chiamando il mio lambda, è necessario sapere per aggiungere il risultato a quel particolare campo. In ogni modo? – BlackVegetable

+1

@BlackVegetable: usa invece una funzione appropriata oppure aggiungi un metodo alla classe 'target'. –

+0

Ho circa 150 di questi elementi (simili) in questo dizionario. Quindi, usando una funzione appropriata per ogni sconfitta lo scopo di questo dizionario. Hmm ... – BlackVegetable

Problemi correlati