181.jpg
概述
Python3對函數(shù)參數(shù)的排序規(guī)則更加通用化了瞧毙,即Python3 keyword-only參數(shù)赦拘,該參數(shù)即為必須只按照關(guān)鍵字傳遞而不會有一個位置參數(shù)來填充的參數(shù)待秃。該規(guī)則在處理人一多個參數(shù)是很有用的奔垦。
keyword-only
kword_only(1, 2, 3, c=4)
print('-' * 20)
kword_only(a=1, c=3)
示例結(jié)果:
1 (2, 3) 4
--------------------
1 () 3
在*args
之后的參數(shù)都需要在調(diào)用中使用關(guān)鍵字的方式傳遞差凹,否則會拋出異常瘦材。
def kword_only(a, *b, c):
print(a, b, c)
kword_only(1, 2, 3)
異常結(jié)果:
kword_only(1, 2, 3)
TypeError: kword_only() missing 1 required keyword-only argument: 'c'
我們也可以在參數(shù)列表中使用一個*
字符厅须,表示函數(shù)不會接受變量長度的參數(shù)列表,而是要求*
后面的參數(shù)都需要使用關(guān)鍵字參數(shù)的方式傳遞宇色。
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)
示例結(jié)果:
1 2 3
--------------------
1 2 3
我們可以看到a
可以利用位置參數(shù)進行傳遞九杂,但是b
、c
必須通過關(guān)鍵字參數(shù)傳遞宣蠕,否則就會拋出異常例隆。
def kword_only(a, *, b, c):
print(a, b, c)
kword_only(1, 2, 3)
異常結(jié)果:
kword_only(1, 2, 3)
TypeError: kword_only() takes 1 positional argument but 3 were given
當(dāng)然我們,可以通過對keyword-only參數(shù)使用默認值抢蚀,這樣例中的a
仍可以通過位置參數(shù)或者關(guān)鍵字參數(shù)傳遞镀层,而b
、c
就是可選的了皿曲,當(dāng)然如果需要傳遞的話仍然是要利用關(guān)鍵字參數(shù)進行傳遞的唱逢。
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)
示例結(jié)果:
1 2 3
--------------------
1 2 3
--------------------
11 22 33