直接看一個正常的函式及其呼叫:
def dog(name, host, age):
print(name, host, age)
dog('dobi', 'xuzhoufeng', 2)
#dobi xuzhoufeng 2
上例中,函式有三個位置引數,我們在呼叫中在相應位置傳遞對應值即可,而 keyword-only arguments 其形式是這樣子的:
def dog(name, host, *, age):
print(name, host, age)
引數中有一個 “*” 號,在該符號之後的所有引數(可一至多個)均被稱為強制關鍵字引數,如果按照位置引數的方式對這些引數傳值:
dog('dobi', 'xuzhoufeng', 2)
#TypeError: dog() takes 2 positional arguments but 3 were given
就會出現 TypeError
,正確的傳值形式為:
dog('dobi', 'xuzhoufeng', age = 2)
#dobi xuzhoufeng 2
也即這裡的age
必須使用關鍵字引數的形式進行傳值。
另外 keyword-only arguments 還需要注意與列表引數進行區分,列表引數的 "*" 號是緊跟引數的,而非獨佔一個位置,且列表引數可以傳零至多個值:
def dog(name, host, *age):
print(name, host, age)
dog('dobi', 'xuzhoufeng')
#dobi xuzhoufeng
但強制性關鍵字引數在傳值時不可以預設(除非其有預設值),且必須使用關鍵字賦值:
dog('dobi', 'xuzhoufeng')
#TypeError: dog() missing 1 required keyword-only argument: 'age'
def dog(name, host, *, age = 2):
print(name, host, age)
dog('dobi', 'xizhoufeng')
#dobi xuzhoufeng
參考: