現在我們知道python定義函式的引數型別有:
必選引數
預設引數
可變引數
關鍵字引數
但是在我們日常中我們是可以組合使用這些引數的:但是使用的時候,引數定義是有順序的
定義的順序必須是:必選引數,預設引數,可變引數,關鍵字引數
1,17,68);font-style:normal;font-varian比如定義乙個函式,包含上述4種引數:
def func(a, b, c=0, *args, **kw):
print 'a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw
在函式呼叫的時候,python直譯器自動按照引數位置和引數名把對應的引數傳進去。
>>> func(1, 2)
a = 1 b = 2 c = 0 args = () kw = {}
>>> func(1, 2, c=3)
a = 1 b = 2 c = 3 args = () kw = {}
>>> func(1, 2, 3, 'a', 'b')
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {}
>>> func(1, 2, 3, 'a', 'b', x=99)
a = 1 b = 2 c = 3 args = ('a', 'b') kw =
最神奇的是通過乙個tuple和dict,你也可以呼叫該函式:
>>> args = (1, 2, 3, 4)
>>> kw =
>>> func(*args, **kw)
a = 1 b = 2 c = 3 args = (4,) kw =
所以,對於任意函式,都可以通過類似func(*args, **kw)的形式呼叫它,無論它的引數是如何定
義的。
小結python的函式具有非常靈活的引數形態,既可以實現簡單的呼叫,又可以傳入非常複雜的引數。
預設引數一定要用不可變物件,如果是可變物件,執行會有邏輯錯誤!
要注意定義可變引數和關鍵字引數的語法:
*args 是可變引數,args接收的是乙個tuple;
**kw 是關鍵字引數,kw接收的是乙個dict。
以及呼叫函式時如何傳入可變引數和關鍵字引數的語法:
可變引數既可以直接傳入: func(1, 2, 3) ,又可以先組裝list或tuple,再通過 *args 傳
入: func(*(1, 2, 3)) ;
關鍵字引數既可以直接傳入: func(a=1, b=2) ,又可以先組裝dict,再通過 **kw 傳
入: func(**) 。
使用 *args 和 **kw 是python的習慣寫法,當然也可以用其他引數名,但最好使用習慣用法
Python引數組合
引數定義的順序必須是 必選引數 預設引數 可選引數 命名關鍵字引數 關鍵字引數 1 a,b為必選引數 c為預設引數 args為可變引數 kw為關鍵字引數 2def f1 a,b,c 0,args,kw 3print a b b,c args args,kw kw 45 引數定義的順序必須是 必選引數...
實現引數的多項組合
在api中經常看到乙個引數有多個選項,並且所有的選項都可以組合使用。今日看了乙個程式,頓悟!首先在乙個類的定義裡面宣告乙個enum,專案為你提供的選項。比如 class cmyclass enum 其他成員 注意這裡面的選項除了task all按位與的時候結果一定要為0 比如這裡的task bar可...
Day5 07 函式的引數 引數組合
現在我們學完了位置引數 預設引數 可變引數 關鍵字引數 命名關鍵字引數五種引數型別。在python中定義函式,可以使用這五種引數進行組合。但是引數定義的順序必須是 必選引數 預設引數 可變引數 命名關鍵字引數和關鍵字引數 def f1 a,b,c 0,pp,kw print a,b,c,pp,kw ...