直接看一個正常的函數及其調用:python
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)
參數中有一個 「*」 號,在該符號以後的全部參數(可一至多個)均被稱爲強制關鍵字參數,若是按照位置參數的方式對這些參數傳值:ui
dog('dobi', 'xuzhoufeng', 2) #TypeError: dog() takes 2 positional arguments but 3 were given
就會出現 TypeError
,正確的傳值形式爲:code
dog('dobi', 'xuzhoufeng', age = 2) #dobi xuzhoufeng 2
也即這裏的age
必須使用關鍵字參數的形式進行傳值。get
另外 keyword-only arguments 還須要注意與列表參數進行區分,列表參數的 "*" 號是緊跟參數的,而非獨佔一個位置,且列表參數能夠傳零至多個值:it
def dog(name, host, *age): print(name, host, age) dog('dobi', 'xuzhoufeng') #dobi xuzhoufeng
但強制性關鍵字參數在傳值時不能夠缺省(除非其有默認值),且必須使用關鍵字賦值:io
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
參考:require
PEP 3102word