繁体   English   中英

在Python中使用* args优于** kwargs有优势吗?

[英]Is there an advantage to using *args over **kwargs in python?

因此,我了解* args和** kwargs之间的区别,并且在函数中定期使用** kwargs传递可选参数。 但是我似乎从来没有使用过args,因为我不想将两个相同参数类型传递给函数,或者我不想不必依赖于函数的位置输入或其他各种上下文在* args上使用** kwargs的具体原因。

是否存在使用* args优于使用** kwargs的场景或用例类型?

*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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM