Mon code:
import threading
def hello(arg, kargs):
print arg
t = threading.Timer(2, hello, "bb")
t.start()
while 1:
pass
L'impression est juste:
b
Comment passer un argument au rappel? Que signifie le kargs?
Timer
prend un tableau d'arguments et un dict d'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 ne lui donnez pas de tableau, donc il traite "bb"
an un itérable; c'est essentiellement comme si vous lui aviez donné ["b", "b"]
.
kwargs
est pour les arguments des 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 des mots clés.
Le troisième argument de Timer
est une séquence. Puisque vous passez "bb" comme 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"])
Quant aux paramètres de hello
, vous voulez probablement dire:
def hello(*args, **kwargs):
Le sens de **kwargs
est couvert dans le queston " Que signifient * args et ** kwargs? "