2016-05-11 10 views
0

イベントのために接続するために、ループ内にたくさんの関数を作成したかったのです。 関連するコードはかなりこれです:予期せずループインデックスに基づいて関数を定義する適切な方法はありますか?

for i in range(10): 
    #Create function for current index 
    tmp = lambda: self.do_something(i) 
    #and connect event to the function 
    event.connect(tmp) 

、(少なくとも私にとっては)、呼び出されたとき - 私は= 9 は単なるリストcomprehentionとipythonで同じコードをテストし、それかのように、すべての機能が動作し同じように動作します。

l = [lambda:i for i in range(10)] 
list(x() for x in l) 

をし、出力は次のようになります。

Out[15]: [9, 9, 9, 9, 9, 9, 9, 9, 9, 9] 

10のDIFを作成するという目標を達成するための適切な方法は何これらの機能はこのように機能しますか?

答えて

1

は、デフォルトの引数を使用します。

event.connect(func, lambda i=i: self.do_something(i)) 

デフォルト引数が定義で評価されているので、あなたが設定されています。

関連する問題