2011-10-25 15 views
8

मेरे पास ट्विस्ट एपीआई का उपयोग कर निम्न पायथन कोड है।ट्विस्ट पायथन एपीआई के साथ कॉलबैक रजिस्टर फ़ंक्शंस के लिए अतिरिक्त तर्क कैसे पारित करें?

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) 

यह ट्विस्ट एपीआई का उपयोग करता है। मैं जो हासिल करना चाहता हूं वह है कॉलबैक किए गए फ़ंक्शन (परिणाम) को उस नाम का मूल्य जो प्रत्येक पुनरावृत्ति में बनाया गया है, निश्चित रूप से फ़ंक्शन_which_returns_a defer() फ़ंक्शन की सामग्री को बदले बिना स्थगित ऑब्जेक्ट के साथ बदलता है। Functions_which_returns_a deffer के प्रत्येक परिणाम में नाम के मान को परिणाम() से पास किया जाना चाहिए इसके साथ कुछ करने के लिए। Ie: पहली बार जब निष्पादन परिणाम फ़ंक्शन तक पहुंच जाता है तो मुझे फ़ंक्शन की आवश्यकता होती है जब मैं = 0 के नाम से मूल्य के मूल्य के साथ डिफर्ड ऑब्जेक्ट का परिणाम धारण करता हूं, तब जब i = 1 डिबर्ड ऑब्जेक्ट को मूल्य के साथ पास किया जाएगा नाम, और इसी तरह। इसलिए मुझे नाम परिवर्तक के साथ नाम परिवर्तनीय अलौंड के साथ बुलाए जाने पर डिफर ऑब्जेक्ट का परिणाम हर बार चाहिए। जब मैं सीधे नामांकित परिणामों के मान का उपयोग करने की कोशिश करता हूं() यह हमेशा अंतिम पुनरावृत्ति का मान रखता है जो तर्कसंगत है, क्योंकि 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) को पासबैक फ़ंक्शन पर पास किया गया है।

संबंधित मुद्दे

 संबंधित मुद्दे