list2 = [lambda x: x+n for n in range(2)]
を行うことによって、この
list1 = [lambda x: x+0, lambda x: x+1]
ような何かを達成しようとしたが、それは動作しません! (どうしてですか?) 関数のリストをプログラムで作成するにはどうすればよいですか?
list2 = [lambda x: x+n for n in range(2)]
を行うことによって、この
list1 = [lambda x: x+0, lambda x: x+1]
ような何かを達成しようとしたが、それは動作しません! (どうしてですか?) 関数のリストをプログラムで作成するにはどうすればよいですか?
n
は、発現のためにより再割り当てされるので、発現のために完了した後の両方がリスト発現せずに見ることができ、この問題の1
より典型的な例であるn
の値が表示されます。
list3 = []
for n in range(2):
def f(x):
return x + n
list3.append(f)
作成されたすべての関数オブジェクトも同じ変数n
を参照し、値1が割り当てられ、両方の関数オブジェクトはlambda x: x + 1
として機能します。
あなたは、作成された各機能のための変数を追加スコープを作成することによって、それに対処することができます:ラムダは最後の要素に 'N'を結合するので
a = [(lambda n: lambda x: x+n)(n) for n in range(2)]
確かに、これは私の最初の試みだったし、ラムダは動作しないかもしれないと思った。 – Ziofil
。 –