Ich habe versucht, ein Wörterbuch mit einer Zeichenfolge für jeden Schlüssel und eine Lambda-Funktion für jeden Wert zu erstellen. Ich bin nicht sicher, wo ich falsch liege, aber ich vermute, dass es entweder mein Versuch ist, ein Lambda in einem Wörterbuch zu speichern, oder die Tatsache, dass mein Lambda einen Shortcut-Operator verwendet.Speichern von Lambdas in einem Wörterbuch
Code:
dict = {
'Applied_poison_rating_bonus':
(lambda target, magnitude: target.equipmentPoisonRatingBonus += magnitude)
}
Der Fehler ausgelöst wird, ist SyntaxError: invalid syntax
und nach rechts an meinem +=
. Sind Shortcut-Operatoren in Lambdas nicht erlaubt, oder bin ich noch weiter vom Track entfernt, als ich dachte?
Aus Gründen der Vernunft habe ich Hunderte von sehr ähnlichen Paaren weggelassen (Es ist nicht nur ein kleines Wörterbuch ist.)
EDIT:
Es ist mein Problem etwas zu vergeben war scheint mit dem Versuch, innerhalb eines Lambda-Ausdrucks. Wie auch immer, mein zu lösendes Problem ist also, wie kann ich eine Methode bekommen, die nur den Schlüssel zu diesem Wörterbuch kennt, um das in meinem (gebrochenen) Code definierte Feld ändern zu können?
Würde irgendeine Art von Aufruf an eval() helfen?
EDIT_FINAL:
Die functools.partial() -Methode zu diesem erweiterten Teil der Frage empfohlen wurde, und ich glaube, dass es nach der Erforschung, finde ich es ausreichend, um mein Problem zu lösen.
Interessant, aber jetzt, was auch immer mein Lambda anruft, muss ich wissen, um das Ergebnis zu diesem bestimmten Feld hinzuzufügen. Irgendwo in der Nähe? – BlackVegetable
@BlackVegetable: Verwenden Sie stattdessen eine geeignete Funktion, oder fügen Sie der Klasse 'target' eine Methode hinzu. –
Ich habe ungefähr 150 dieser (ähnlichen) Elemente in diesem Wörterbuch. Somit wird durch die Verwendung einer geeigneten Funktion für jeden der Zweck dieses Wörterbuchs vereitelt. Hmm ... – BlackVegetable