2010-12-11 3 views

ответ

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 - это последовательность. Поскольку вы передаете «bb» в качестве этой последовательности, hello получает элементы этой последовательности («b» и «b») в качестве отдельных аргументов (и kargs). Поместите «bb» в список, а hello получит строку в качестве первого аргумента.

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

Что касается параметров hello «s, вы, вероятно, имели в виду:

def hello(*args, **kwargs): 

Смысл **kwargs кроется в Queston "What does *args and **kwargs mean?"

Смежные вопросы