2

次のような 10 の約数を含むリストがあります。

print filter(lambda x: 10 % x == 0, range(1, 10))
>>>[1, 2, 5]

次に、そのような関数のリストが必要です:

F =  [lambda x:k+x for k in filter(lambda x: 10 % x == 0, range(1, 10))]

リスト内のすべての関数を呼び出すと、間違っていることがわかります。

for f in F:
   print(f(0))
>>> 5
>>> 5
>>> 5

関数の正しいリストを取得するにはどうすればよいですか?

4

1 に答える 1

1

ラムダ関数は変数をキャプチャしますk。これを回避するには、lamba 関数のローカル変数にコピーします。

F =  [lambda x, k=k:k+x for k in filter(lambda x: 10 % x == 0, range(1, 10))]
于 2013-08-01T09:26:16.373 に答える