Python3對函數參數的排序規則更加通用化了,即Python3 keyword-only參數,該參數即爲必須只按照關鍵字傳遞而不會有一個位置參數來填充的參數。該規則在處理人一多個參數是頗有用的。python
kword_only(1, 2, 3, c=4) print('-' * 20) kword_only(a=1, c=3) 複製代碼
示例結果:bash
1 (2, 3) 4
--------------------
1 () 3
複製代碼
在*args
以後的參數都須要在調用中使用關鍵字的方式傳遞,不然會拋出異常。markdown
def kword_only(a, *b, c): print(a, b, c) kword_only(1, 2, 3) 複製代碼
異常結果:函數
kword_only(1, 2, 3) TypeError: kword_only() missing 1 required keyword-only argument: 'c' 複製代碼
咱們也能夠在參數列表中使用一個*
字符,表示函數不會接受變量長度的參數列表,而是要求*
後面的參數都須要使用關鍵字參數的方式傳遞。ui
def kword_only(a, *, b, c): print(a, b, c) kword_only(1, b=2, c=3) print('-'*20) kword_only(b=2, c=3, a=1) 複製代碼
示例結果:spa
1 2 3
--------------------
1 2 3
複製代碼
咱們能夠看到a
能夠利用位置參數進行傳遞,可是b
、c
必須經過關鍵字參數傳遞,不然就會拋出異常。code
def kword_only(a, *, b, c): print(a, b, c) kword_only(1, 2, 3) 複製代碼
異常結果:orm
kword_only(1, 2, 3)
TypeError: kword_only() takes 1 positional argument but 3 were given
複製代碼
固然咱們,能夠經過對keyword-only參數使用默認值,這樣例中的a
仍能夠經過位置參數或者關鍵字參數傳遞,而b
、c
就是可選的了,固然若是須要傳遞的話仍然是要利用關鍵字參數進行傳遞的。排序
def kword_only(a, *, b=2, c=3): print(a, b, c) kword_only(1) print('-'*20) kword_only(a=1) print('-'*20) kword_only(b=22, c=33, a=11) 複製代碼
示例結果:it
1 2 3
--------------------
1 2 3
--------------------
11 22 33
複製代碼