1. 位置參數(必選參數)
2. 默認參數
3. 可變參數( args)
4. 關鍵字參數 (**kw)
5. 命名關鍵字參數 (, named_kw)
可變參數:
def func(*args):
type(args) == tuple
func(1,2,3,4)
mytuple = (1,2,3)
func(*mytuple)
允許傳入0個或任意個參數,這些可變參數在函數調用時自動組裝爲一個tuple。
若多個參數已經組合成tuple,則可使用 *mytulple 傳給可變參數args
關鍵字參數
def func(**kw):
type(kw) == dict
kw['city'] == 'Shanghai'
kw['code'] == 30
kw['pc'] == 200030
func(city='Shanghai', code=30, pc=200030)
mydict = {city='Shanghai', code=30, pc=200030}
func(**mydict)
允許你傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝爲一個dict。鍵爲指定的參數名的字符串,值爲指定的參數名的值。
命名關鍵字參數
對於關鍵字參數,函數的調用者可以傳入任意不受限制的關鍵字參數。如果要限制關鍵字參數的名字,就可以用命名關鍵字參數。
def func(arg1, *, name1, name2):
pass
def func(arg1, *agrs, name1, name2):
pass
func(1, name1='Bob', name2='Jan')
由 * 或 可變參數(*args)隔開,後面的參數都是命名關鍵字參數。
調用時,必須寫明參數名。
組合使用5種參數
參數定義的順序必須是:
必選參數 > 默認參數 > 可變參數 > 命名關鍵字參數 > 關鍵字參數。
def func(a, b, c=0, *args, namedkw1, namedkw2, **kw):
pass
def func(a, b, c=0, *, namedkw1, **kw):
pass
- 不按順序提供部分默認參數時,需要把參數名寫上。
- 命名關鍵字參數必須提供參數名。
- 命名關鍵字參數可有默認值,若無默認值則必須提供值。
- 可選參數,關鍵字參數可不提供值。
對於任意函數,都可以通過類似func(*args, **kw)的形式調用它,無論它的參數是如何定義的。
args元組會按順序賦值給(必選,默認,可變)參數。先滿足前二者數量,多餘的0個或多個傳給可變參數。
kw字典會按key傳遞參數給(命名關鍵字參數,關鍵字參數)。key中必須有 無默認值的命名關鍵字參數。
mytuple = (1, 2, 3, 4, 5, 6)
mydict = {name1:value1, name2:value2}
func(*mytuple, **mydict)