如何将 *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()
一个函数接受 *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()