Подтвердить что ты не робот

Python theading.Timer: как передать аргумент для обратного вызова?

Мой код:

    import threading

def hello(arg, kargs):
    print arg

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

while 1:
    pass

Вывод печати:

b

Как передать аргумент для обратного вызова? Что означают карги?

4b9b3361

Ответ 1

Timer принимает массив аргументов и аргумент ключевого слова dict, поэтому вам нужно передать массив:

import threading

def hello(arg):
    print arg

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

while 1:
    pass

Вы видите "b", потому что вы не даете ему массив, поэтому он обрабатывает "bb" итерабельность; это по существу, как будто вы дали ему ["b", "b"].

kwargs для аргументов ключевого слова, например:

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

См. http://docs.python.org/release/1.5.1p1/tut/keywordArgs.html для получения информации о аргументах ключевых слов.

Ответ 2

Третий аргумент Timer - это последовательность. Поскольку вы передаете "bb" в качестве этой последовательности, hello получает элементы этой последовательности ( "b" и "b" ) в виде отдельных аргументов (arg и kargs). Поместите "bb" в список, а hello получит строку в качестве первого аргумента.

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

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

def hello(*args, **kwargs):

Значение **kwargs рассматривается в вопросе "Что означает * args и ** kwargs?