Python函數參數匹配模型通用規則keyword-only參數

概述

Python3對函數參數的排序規則更加通用化了,即Python3 keyword-only參數,該參數即爲必須只按照關鍵字傳遞而不會有一個位置參數來填充的參數。該規則在處理人一多個參數是頗有用的。python

keyword-only

kword_only(1, 2, 3, c=4)
print('-' * 20)
kword_only(a=1, c=3)
複製代碼

示例結果:bash

1 (2, 3) 4
--------------------
1 () 3
複製代碼

*args以後的參數都須要在調用中使用關鍵字的方式傳遞,不然會拋出異常。函數

def kword_only(a, *b, c):
    print(a, b, c)


kword_only(1, 2, 3)
複製代碼

異常結果:ui

kword_only(1, 2, 3)
TypeError: kword_only() missing 1 required keyword-only argument: 'c'
複製代碼

咱們也能夠在參數列表中使用一個*字符,表示函數不會接受變量長度的參數列表,而是要求*後面的參數都須要使用關鍵字參數的方式傳遞。spa

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)
複製代碼

示例結果:code

1 2 3
--------------------
1 2 3
複製代碼

咱們能夠看到a能夠利用位置參數進行傳遞,可是bc必須經過關鍵字參數傳遞,不然就會拋出異常。排序

def kword_only(a, *, b, c):
    print(a, b, c)


kword_only(1, 2, 3)
複製代碼

異常結果:string

kword_only(1, 2, 3)
TypeError: kword_only() takes 1 positional argument but 3 were given
複製代碼

固然咱們,能夠經過對keyword-only參數使用默認值,這樣例中的a仍能夠經過位置參數或者關鍵字參數傳遞,而bc就是可選的了,固然若是須要傳遞的話仍然是要利用關鍵字參數進行傳遞的。it

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)
複製代碼

示例結果:io

1 2 3
--------------------
1 2 3
--------------------
11 22 33
複製代碼
相關文章
相關標籤/搜索