2010-12-11 10 views

Antwort

39

Timer nimmt eine Reihe von Argumenten und ein dict von Keyword-Argumenten, so müssen Sie ein Array weitergeben müssen:

import threading 

def hello(arg): 
    print arg 

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

while 1: 
    pass 

Du sieht „b“, weil Sie ihm ein Array nicht geben, so es behandelt "bb" ein iterable; es ist im Wesentlichen so, als ob Sie es ["b", "b"] gaben.

kwargs ist für die Keyword-Argumente, zum Beispiel:

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

http://docs.python.org/release/1.5.1p1/tut/keywordArgs.html Weitere Informationen zum Schlüsselwort-Argumente.

+1

Hier ist ein Link auf die [Abschnitt auf Keyword-Argumente ] (http://docs.python.org/tutorial/controlflow.html#keyword-arguments) in einer aktuelleren Version des Tutorials (obwohl die Informationen in etwa gleich aussehen). – martineau

+1

Google ließ mich in dieser Version fallen. Ironischerweise ist die ältere Version leichter zu lesen; Sie sind so weit über Bord gegangen, dass das Styling in den neueren Modellen so störend wirkt, dass die Hintergrundfarbe spastisch vor und zurück springt. –

3

Das dritte Argument zu Timer ist eine Sequenz. Da Sie "bb" als diese Sequenz übergeben, erhält hello die Elemente dieser Sequenz ("b" und "b") als separate Argumente (arg und kargs). Setzen Sie "bb" in eine Liste und hello wird die Zeichenfolge als erstes Argument erhalten.

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

Was hello ‚s-Parameter, meinen Sie wohl:

def hello(*args, **kwargs): 

Die Bedeutung von **kwargs ist in der queston bedeckt "What does *args and **kwargs mean?"

Verwandte Themen