如何将* args或** kwargs本身传递给threading的目标函数。目标?

时间:2016-09-14 07:39:51

标签: python python-multithreading

功能接受*args**kwargs

def b(num, *args, **kwargs):
    print('num', num)
    print('args', args)
    print('kwargs', kwargs)

将其称为b(5, *[1, 2], **{'a': 'b'})会产生以下输出:

num 5
args (1, 2)
kwargs {'a': 'b'}

threading.Thread(target=b, args=[5, [1, 2], {'a': 'b'}]).start()给出:

num 5
args ([1, 2], {'a': 'b'})
kwargs {}

threading.Thread(target=b, kwargs={'num': 5, '*args': [1, 2], '**kwargs': {'a': 'b'}}).start()给出:

num 5
args ()
kwargs {'**kwargs': {'a': 'b'}, '*args': [1, 2]}

将* args和** kwargs传递给此函数的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

threading.Thread(target=b, args=[5, 1, 2], kwargs={'a': 'b'}).start()

给出预期的输出。另一种选择是使用functools。以下代码也正确传递参数:

threading.Thread(target=functools.partial(b, 5, *[1, 2], **{'a': 'b'})).start()