29

各キーの文字列と各値のラムダ関数を使用して辞書を作成しようとしています。どこが間違っているのかわかりませんが、最初にラムダを辞書に保存しようとしたか、ラムダがショートカット演算子を使用しているという事実のいずれかであると思われます。

コード:

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

発生しているエラーはSyntaxError: invalid syntax、 my を右に指していること+=です。ショートカット演算子はラムダでは許可されていませんか、それとも思ったよりも軌道から外れていますか?

正気を保つために、非常によく似た何百ものペアを省略しました (単なる小さな辞書ではありません)。

編集:

私の問題は、ラムダ式内で何かを割り当てようとしたことだったようです。しかし、解決すべき問題は、このディクショナリのキーのみを知っているメソッドを取得して、(壊れた) コードで定義されているフィールドを変更できるようにする方法です。

eval() を呼び出す方法は役に立ちますか?

EDIT_FINAL:

質問のこの拡張部分には functools.partial() メソッドが推奨されました。調査した後、問題を解決するのに十分であることがわかります。

4

1 に答える 1

51

代入を式で使用することはできず、 は式lambdaのみを取ります。

それ以外の場合は、ラムダを辞書に保存できます。

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

lambdaもちろん、上記は結果を返すだけで、そのtarget.equimentPoisonRatingBonus場で変更されることはありません。

于 2013-01-19T23:16:24.247 に答える