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

How to pass *args or **kwargs itself to the target function of threading.Target?

一个函数接受 *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 传递给此函数的正确方法是什么?

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()