Python基礎:關於星號元組*args和雙星號字典**kwargs作為實參的使用總結
阿新 • • 發佈:2018-12-19
許多初學者或Python愛好者可能都遇到過用星號元組*args和雙星號字典**kwargs作為實參來使用的困惑,這裡本人舉了幾個小例子來闡述一下總結心得。
1. 星號元組*args傳參,如
:
def fn(a,b,c,d):
print(a,b,c,d)
return
tup = (5,6,7,8)
fn(*tup)
輸出結果:5 6 7 8
上述將變數tup,加上*作為實參傳入函式中後,即依次對應著形參列表進行賦值,實質上是位置傳參,如果形引數量與元組內元素數量不符,則會報數量不匹配的錯誤。
如果是下面方式定義函式的形參列表,則不會有上述的錯誤產生~想怎麼傳參就怎麼傳參!
def fn(*args):
print(args)
return
tup = (1,2,3,4,5,6,7)
fn(*tup,1,2,3,4,)
輸出結果: (1, 2, 3, 4, 5, 6, 7,1,2,3,4)
# 1. 雙星號字典kwargs傳參,如**
def fn(a,b,c,d):
print(a,b,c,d)
return
dic = {
'a':5,
'b':6,
'c':7,
'd':8,
}
fn(**dic)
輸出結果:5 6 7 8 上述將變數dic,加上**作為實參傳入函式中後,即依次對應著形參列表進行賦值,實質上為關鍵字傳參,如果形引數量與元組內元素數量不符,則會報數量不匹配的錯誤。
同理:如果是下面方式定義函式的形參列表,則不會有上述的錯誤產生~想怎麼傳參就怎麼傳參!
def fn(**kwargs):
print(kwargs)
return
dic = {
'a':5,
'b':6,
'c':7,
'd':8,
}
fn(**dic,e=1,f=2)
輸出結果:{‘a’: 5, ‘b’: 6, ‘c’: 7, ‘d’: 8, ‘e’: 1, ‘f’: 2} 注意:實參若挨個傳輸,必須為關鍵字傳參的形式,且關鍵字變數名不可重複,如fn(**dic,a=1),這樣傳參就會報錯,因為出現了2個a變數。
結論:星號元組和雙星號字典的傳參方式,可以理解為在普通的元組或者字典變數名前加‘’*‘’或者“**”,並賦予了該變數名特殊的功能:
1.若該特殊變量出現在形參列表中,則會將傳入的變數中符合條件的元素納入到該特殊變數中。 2.若該特殊變量出現在實參列表中,則會將其中的元素拆分成對應元素,並可以被形參列表中的引數獲取
以上僅為個人觀點,若有疏漏,請各位指點!