功能接受*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传递给此函数的正确方法是什么?
答案 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()