Python 的 Keyword-Only Arguments (強制關鍵字引數)

xu_zhoufeng發表於2016-05-21

直接看一個正常的函式及其呼叫:

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

參考:

PEP 3102

相關文章