6

この例を考えてみましょう

def dump(value):
    print value

items = []    
for i in range(0, 2):
    items.append(lambda: dump(i))

for item in items:
    item()

出力:

1
1

どうすれば入手することができますか:

0
1
4

4 に答える 4

5

ラムダでデフォルト値を持つパラメーターを使用できます。

for i in range(0, 2):
    items.append(lambda i=i: dump(i))

これが機能するのは、関数が呼び出されたときではなく、関数が定義されたときにデフォルト値が評価されるためです。

于 2012-10-11T12:50:34.420 に答える
4

以下を使用できます。

for i in range(0, 2):
    items.append(lambda i=i: dump(i))

の現在の値を取得するi

これは、デフォルトのパラメーター値が関数の作成時に評価されi、外部変数ではなく、デフォルトとして必要な値を持つ関数パラメーターであるため機能します。

より詳細な説明は、この回答にあります。

于 2012-10-11T12:50:39.297 に答える
1

完全を期すために、次のこともできます。

for i in range(0, 2):
    items.append((lambda i: lambda: dump(i))(i))
于 2012-10-12T01:36:27.017 に答える
0

出力値は、関数の宣言時ではなく、関数の評価時の i の値です。それがあなたが望む結果を得られない理由です。

于 2012-10-11T12:52:02.470 に答える