Python::函式可變參數(參數前加星號)

之前翻別人的code時看到

1
2
def foo(*a,**b):
pass

覺得很好奇,就去查了一下。

在參數前加星號代表長度可以改變的參數。

一個星號(比如a)代表 a 是一個 tuple(不可以改變長度的陣列)。
兩個星號(*
b)代表一個字典(dict),就是一個key對應一個value。

至於Python傳遞參數的方法,首先就是照順序一個一個進去。
但是如果直接用變數名指定也行(比如有個參數叫 arg1 => 可以用 arg1=5)

如果有遇到一個星號,則沒有取名字,前面又沒有空位可以放的參數都會被丟進去。

如果有兩個星號,那所有 a=1,b=2,c=3等等有指定名稱,但參數沒有指定好的都會被放到字典裡變成 {‘a’:1,’b’:2,’c’:3}。不過如果其中有的已經指定名稱了(比如我的函式裡有個參數叫做b)那麼那個參數就不會被放到字典裡。(所以b的值會被設定成2,不會被加入字典)。

有個好用的功能,就是如果要把這些參數再傳入某個函式裡,一樣可以在參數名字前加星號(比入剛剛的a,*b),這樣在傳入的時候,傳進去的便不是tuple和dict物件,Python會把他們打散變回我們原本傳入的樣子。