python lambda 代入 - ラムダ関数を使った辞書の理解が間違った結果をもたらす




1 Answers

次の作業が必要です:

def make_func(x):
    return lambda y: x

f = {x: make_func(x) for x in range(10)}

あなたのコードのxは最後のx値を参照して終わります。これは9ですが、私の場合は関数スコープのxを参照しています。

複数行 引数なし ラムダ式

私はPython 3.5.1で以下のコードを試しました:

>>> f = {x: (lambda y: x) for x in range(10)}
>>> f[5](3)
9

これは5を返すはずです。 私は他の価値がどこから来ているのか分からず、何も見つけることができませんでした。

それは参照に関連するもののようです - それは常に割り当てられた最後の関数であるf[9]答えを返します。

ここでのエラーは何ですか?これが正しく動作するようにこれをどのように行う必要がありますか?




Related