![](/img/trans.png)
[英]SyntaxError using *args and **kwargs in an __init__ in Python
[英]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.