所以我理解* args和** kwargs之间的区别,我在我的函数中定期使用** kwargs传递可选参数。但是我似乎永远不会使用args,因为我不希望将两个相同的参数类型传递给函数,或者我不想依赖于函数的位置输入,或者其他各种更多的上下文使用** kwargs over * args的具体原因。
是否存在使用* args比使用** kwargs更好的情景或用例类型?
答案 0 :(得分:1)
*args
对于任何对没有限制的数组执行操作的函数都是首选,例如:
def add(*args):
total = 0
for num in args:
total = total + num
return total
我可以使用任意数量的参数调用add
:
add(1, 2, 2) # 5
add(1) # 1
add(1, 2, 3, 4, 5, 6, 7) # 28
答案 1 :(得分:1)
感谢*args
,您可以:
itertools.chain([1,2,3], ['a', 'b', 'c'], [True, False, False])
如果我们选择使用**kwargs
而不是*args
,我们需要定义某种命名标准,以便用户可以根据需要传入尽可能多的迭代。
调用代码最终会是这样的:
itertools.chain(seq1=[1,2,3], seq2=['a','b','c'], seq3=[True, False, False])
这根本不是很好。
因此,*args
在处理未知长度的参数时非常有用。