1. 程式人生 > >Python基礎:關於星號元組*args和雙星號字典**kwargs作為實參的使用總結

Python基礎:關於星號元組*args和雙星號字典**kwargs作為實參的使用總結

許多初學者或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.若該特殊變量出現在實參列表中,則會將其中的元素拆分成對應元素,並可以被形參列表中的引數獲取

以上僅為個人觀點,若有疏漏,請各位指點!