python自定義函數中有兩中不定長參數,第一種是*name,第二種是**name。加了星號 * 的參數會以元組(tuple)的形式導入,存放所有未命名的變量參數。加了兩個星號 ** 的參數會以字典的形式導入。
第一種形式的不定長參數,在傳入額外的參數時可以不用指明參數名,直接傳入參數值即可,第二種因為返回的是字典,所以傳入時需要指定參數名。
下面是兩個簡單的栗子:
‘ *name ’形式:
1 def funA(a, b, *args): 2 print(a) 3 print(b) 4 print(args) 5 6 7 funA(1, 2, 3, 5, 6, 7)
輸出如下:
1
2
(3, 5, 6, 7)
可以看出,前1和2這兩個數據傳給了a和b,而剩下的5,6,7三個數都以元祖的形式存在了args這個參數中,所以在第四行輸出args時,輸出的是個元組,當然也可以像訪問元組那樣輸出args中的某一個值,如下:
1 def funA(a, b, *args): 2 print(a) 3 print(b) 4 print(args[0])
輸出如下:
1
2
3
這就只輸出了args這個元祖中的第一個值。
‘ **name ’形式:
1 def funB(a, b, **vardict): 2 print(a) 3 print(b) 4 print(vardict) 5 print(vardict['l']) 6 7 8 funB(1, 2, l=3, m=4)
輸出結果如下:
1
2
{'l': 3, 'm': 4}
3
可以看出,前1和2這兩個數據傳給了a和b,而 l 和 m 這兩個參數被以字典的形式存在的vardict中,所以第四行輸出的是一個字典,第五行只輸出了vardict這個字典中的一個值。
個人覺得第二種形式要比第一種形式更好用。想象一下這個場景,在填寫資料時,有些選項不是必填項,那么怎么判斷用戶有沒有填寫呢?這個時候這種形式的不定長參數就發揮作用了。
-------------------------------------------------------------------------------------------------------------------------------------------------------還在努力中的小白,若文章有錯誤,大佬們隨時指正。嘻嘻------------------------------------------------------------------------------------------------------------------------------------------------------