2010-12-11 11 views

Odpowiedz

39

Timer pobiera tablicę argumentów i dict argumentów kluczowych, więc trzeba przekazać tablicę:

import threading 

def hello(arg): 
    print arg 

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

while 1: 
    pass 

widzisz „B”, ponieważ nie jesteś nadając mu tablicę, tak traktuje "bb" an itableable; zasadniczo jest tak, jakbyś dał go ["b", "b"].

kwargs jest dla argumentów kluczowych, np:

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

http://docs.python.org/release/1.5.1p1/tut/keywordArgs.html Zobacz informacje na temat argumentów kluczowych.

+1

Oto link do [sekcja na argumentach słów kluczowych ] (http://docs.python.org/tutorial/controlflow.html#keyword-arguments) w bardziej aktualnej wersji samouczka (chociaż informacje wyglądają tak samo). – martineau

+1

Google ciągle upuszczał mnie w tej wersji. Jak na ironię, starsza wersja jest łatwiejsza do odczytania; zaszli tak daleko za burtę, że w nowszych stylizacjach jest to rozpraszające, a tło kolorami spazmatycznie skacze w tę iz powrotem. –

3

Trzeci argument do Timer jest sekwencją. Ponieważ przekazujesz "bb" jako tę sekwencję, hello pobiera elementy tej sekwencji ("b" i "b") jako oddzielne argumenty (arg i kargs). Umieść "bb" na liście, a hello otrzyma łańcuch jako pierwszy argument.

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

chodzi o hello „s parametrów, to prawdopodobnie znaczy:

def hello(*args, **kwargs): 

Znaczenie **kwargs jest pokryta w Queston "What does *args and **kwargs mean?"

Powiązane problemy