![](/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.