在python中使用* args而不是** kwargs是否有优势?

时间:2018-01-04 14:50:34

标签: python

所以我理解* args和** kwargs之间的区别,我在我的函数中定期使用** kwargs传递可选参数。但是我似乎永远不会使用args,因为我不希望将两个相同的参数类型传递给函数,或者我不想依赖于函数的位置输入,或者其他各种更多的上下文使用** kwargs over * args的具体原因。

是否存在使用* args比使用** kwargs更好的情景或用例类型?

2 个答案:

答案 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)

考虑itertools.chain

感谢*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在处理未知长度的参数时非常有用。