2017-04-02 7 views
2

私はこのPythonで関数のリストを作る方法は?

list2 = [lambda x: x+n for n in range(2)] 

を行うことによって、この

list1 = [lambda x: x+0, lambda x: x+1] 

ような何かを達成しようとしたが、それは動作しません! (どうしてですか?) 関数のリストをプログラムで作成するにはどうすればよいですか?

+1

。 –

答えて

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)] 
+0

確かに、これは私の最初の試みだったし、ラムダは動作しないかもしれないと思った。 – Ziofil

関連する問題