2009-04-17 13 views
3
a = [] a.append(lambda x:x**0) 
a.append(lambda x:x**1) 

a[0](2), a[1](2), a[2](2)... spits out 1, 2, 4, ... 

b=[] 
for i in range(4) 
    b.append(lambda x:x**i) 

b[0](2), b[1](2), b[2](2)... spits out 8, 8, 8, ... 

forループでは、iが変数としてラムダに渡されているので、私が呼び出すと、実行するコードの代わりにiの最後の値が使用されますとともに[]。ラムダ式の変数の値を使用する

変数i自体の代わりにiの値を取得するにはどうすればlambdaに伝えることができますか?

+1

-1:Lambdas :-(。関数を定義するだけで、何が起こっているのかははっきりしています。 –

+0

(疑似)コードを引用する前に、あなたの問題/状況を説明するための質問をするときは、私はお勧めしたい。 – physicsmichael

答えて

6

醜い、しかし、1つの方法:(。すべてのコード未テスト)

for i in range(4) 
    b.append(lambda x, copy=i: x**copy) 

あなたは

def raiser(power): 
    return lambda x: x**power 

for i in range(4) 
    b.append(raiser(i)) 

を好むかもしれない

+0

は最初のものをテストしました:うまく動作します.. – rpr

2
b=[] 
f=(lambda p:(lambda x:x**p)) 
for i in range(4): 
    b.append(f(i)) 
for g in b: 
    print g(2) 
2

工場

def power_function_factory(value): 
    def new_power_function(base): 
     return base ** value 
    return new_power_function 

b = [] 
for i in range(4): 
    b.append(power_function_factory(i)) 
の定義

または

b = [power_function_factory(i) for i in range(4)] 
関連する問題