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

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

概述

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

keyword-only

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

示例結果:

1 (2, 3) 4
--------------------
1 () 3

在*args之後的參數都需要在調用中使用關鍵字的方式傳遞,否則會拋出異常。

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'

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

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)

示例結果:

1 2 3
--------------------
1 2 3

我們可以看到a可以利用位置參數進行傳遞,但是b、c必須通過關鍵字參數傳遞,否則就會拋出異常。

def kword_only(a, *, b, c):
print(a, b, c)
kword_only(1, 2, 3)

異常結果:

 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)

示例結果:

1 2 3
--------------------
1 2 3
--------------------
11 22 33


分享到:


相關文章: