2011-10-25 64 views
8

我有以下Python代碼使用扭曲的API。如何使用扭曲的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 deffer的每個結果中,該名稱的值應該傳遞給results()以完成某些操作。即:在執行到達結果函數的第一次迭代中,當i = 0時,我需要函數保存已緩存對象的結果以及名稱的值,然後當i = 1時,將使用值爲名稱等等。所以我需要每次使用名稱變量調用名稱變量alond時的延遲對象的結果。當我嘗試直接使用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)傳遞給回調函數。

相關問題