2010-12-11 42 views

Répondre

39

Timer prend un tableau d'arguments et un dict des arguments de mots clés, vous devez donc passer un tableau:

import threading 

def hello(arg): 
    print arg 

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

while 1: 
    pass 

Vous voyez « b » parce que vous n'êtes pas en lui donnant un tableau, donc il traite "bb" un itérable; c'est essentiellement comme si vous l'avez donné ["b", "b"].

kwargs est pour les arguments de mots-clés, par exemple:

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

Voir http://docs.python.org/release/1.5.1p1/tut/keywordArgs.html pour plus d'informations sur les arguments de mot-clé.

+1

Voici un lien vers la section [sur des arguments de mots-clés ] (http://docs.python.org/tutorial/controlflow.html#keyword-arguments) dans une version plus récente du tutoriel (bien que l'information ressemble à peu près au même). – martineau

+1

Google a continué à me laisser tomber dans cette version. Ironiquement, l'ancienne version est plus facile à lire; ils sont allés si loin avec le style dans les plus récents que c'est distrayant, avec la couleur de fond spasticellement sauter d'avant en arrière. –

3

Le troisième argument à Timer est une séquence. Puisque vous passez "bb" comme cette séquence, hello obtient les éléments de cette séquence ("b" et "b") comme arguments séparés (arg et kargs). Mettez "bb" dans une liste et hello obtiendra la chaîne comme premier argument.

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

En ce qui concerne hello paramètres de », vous voulez dire sans doute:

def hello(*args, **kwargs): 

Le sens de **kwargs est couvert dans la queston "What does *args and **kwargs mean?"