python函數中的不定長參數


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這個字典中的一個值。

個人覺得第二種形式要比第一種形式更好用。想象一下這個場景,在填寫資料時,有些選項不是必填項,那么怎么判斷用戶有沒有填寫呢?這個時候這種形式的不定長參數就發揮作用了。

 

-------------------------------------------------------------------------------------------------------------------------------------------------------還在努力中的小白,若文章有錯誤,大佬們隨時指正。嘻嘻------------------------------------------------------------------------------------------------------------------------------------------------------

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM