2010-12-11 12 views
22

मेरे कोड:पायथन theading.Timer: कॉलबैक के लिए तर्क कैसे पास करें?

import threading 

def hello(arg, kargs): 
    print arg 

t = threading.Timer(2, hello, "bb") 
t.start() 

while 1: 
    pass 

प्रिंट आउट पुट बस है:

b 

मैं कॉलबैक करने के लिए एक तर्क कैसे पारित कर सकते हैं? कारग का मतलब क्या है?

उत्तर

39

Timer तर्क की एक सरणी और कीवर्ड तर्कों की एक dict लगता है, इसलिए एक सरणी पारित करने के लिए की जरूरत है:

import threading 

def hello(arg): 
    print arg 

t = threading.Timer(2, hello, ["bb"]) 
t.start() 

while 1: 
    pass 

आप "बी" देख रहे हैं क्योंकि आप इसे एक सरणी नहीं दे रहे हैं, तो यह "bb" एक अस्थिर व्यवहार करता है; यह अनिवार्य रूप से है जैसे आपने इसे ["b", "b"] दिया है।

kwargs जैसे, कीवर्ड तर्क के लिए है:

t = threading.Timer(2, hello, ["bb"], {arg: 1}) 

कीवर्ड तर्क के बारे में जानकारी के लिए http://docs.python.org/release/1.5.1p1/tut/keywordArgs.html देखें।

+1

यहां दी गई कीवर्ड तर्क पर करने के लिए [खंड एक लिंक भी है में शामिल है ] (http://docs.python.org/tutorial/controlflow.html#keyword-arguments) ट्यूटोरियल के एक अधिक अद्यतित संस्करण में (हालांकि जानकारी उसी के बारे में दिखती है)। – martineau

+1

Google ने मुझे उस संस्करण में छोड़ दिया। विडंबना यह है कि पुराने संस्करण को पढ़ने में आसान है; वे नए रंगों में स्टाइल के साथ अब तक चले गए हैं कि यह विचलित हो रहा है, पृष्ठभूमि रंग के साथ तेजी से कूदते हुए। –

3

Timer पर तीसरा तर्क एक अनुक्रम है। चूंकि आप उस अनुक्रम के रूप में "बीबी" पास करते हैं, hello उस अनुक्रम के तत्व ("बी" और "बी") को अलग तर्क के रूप में प्राप्त करता है (arg और kargs)। एक सूची में "बीबी" डालें और hello स्ट्रिंग को पहली तर्क के रूप में प्राप्त करेगा। hello के मापदंडों के लिए के रूप में

t = threading.Timer(2, hello, ["bb"]) 

, तो आप शायद मतलब है:

def hello(*args, **kwargs): 

**kwargs का अर्थ queston "What does *args and **kwargs mean?"

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