2011-10-25 12 views
8

私はねじれたAPIを使用して次のPythonコードを持っています。ツイストされたpython apiでコールバックレジスタ関数に余分な引数を渡すには?

def function(self,filename):  
    def results(result): 
     //do something 
    for i in range(int(numbers)) : 
     name = something that has to do with the value of i   
     df = function_which_returns_a defer(name) 
     df.addCallback(results) 

これはTwisted APIを使用しています。私が達成したいのは、コールバックされた関数(結果)に、各繰返しで生成される名前の値を、遅延オブジェクトと一緒にfunctions_which_returns_a defer()関数の内容を変更せずに渡すことです。 functions_which_returns_a定義のすべての結果で、名前の値をresults()に渡して、これを使って何かを行う必要があります。つまり、実行が結果関数に到達したときの最初の反復で、i = 0のときにdefferedオブジェクトの結果をnameの値と共に保持し、i = 1のときにdeferオブジェクトが値渡しされる必要があります名前などの名前を変数と一緒に呼び出すと、遅延オブジェクトの結果が毎回必要になります。 nameinside results()の値を直接使用しようとすると、function_which_returns_a defer(name)が返されていないので、それは常に最後の反復の値を保持します。

答えて

15

あなたは、単にDeferred.addCallbackにそれらの引数を渡すことによってDeferred.addCallback呼び出しサイトでDeferredコールバックに追加の引数を渡すことができます。

 df.addCallback(results, name=name) 

すべての引数:また、キーワード引数を渡すことができ

def function(self,filename):  
    def results(result, name): 
     # do something 
    for i in range(int(numbers)) : 
     name = something that has to do with the value of i   
     df = function_which_returns_a defer(name) 
     df.addCallback(results, name) 

これをaddCallback(またはaddErrback)に渡してコールバック関数に渡します。

関連する問題