web-dev-qa-db-ja.com

python threading.Timer:引数をコールバックに渡す方法は?

私のコード:

    import threading

def hello(arg, kargs):
    print arg

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

while 1:
    pass

印刷出力は次のとおりです。

b

コールバックに引数を渡すにはどうすればよいですか? kargsの意味?

31
Bin Chen

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 を参照してください。

52
Glenn Maynard

Timerの3番目の引数はシーケンスです。 「bb」をそのシーケンスとして渡すので、helloはそのシーケンスのエレメント(「b」と「b」)を別々の引数(argkargs)として取得します。リストに「bb」を入れると、helloは最初の引数として文字列を取得します。

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

helloのパラメーターについては、おそらく次のことを意味します。

def hello(*args, **kwargs):

の意味 **kwargsはクエストでカバーされています " * argsと** kwargsの意味? "

4
outis