關鍵字參數允許你傳入0個或任意多個含參數名的參數,這些關鍵字參數在函數內部自動組裝為一個dict
對於關鍵字參數,函數的調用者可以傳入任意不受限制的關鍵字參數,以擴展函數的功能
但至於到底傳入了哪些關鍵字參數,就需要在函數內部通過kw檢查
定義關鍵字參數函數
def person(name, age, **kw): #函數person除了必選參數name和age外,還接受關鍵字參數kw print('name:', name, 'age:', age, 'other:', kw) person('Michael', 30) #輸出:name: Michael age: 30 other: {},調用該函數時,可只傳入必選參數 person('Bob', 35, city='Beijing') #輸出:name: Bob age: 35 other: {'city': 'Beijing'},調用該函數時,也可傳入任意個數的關鍵字參數
和可變參數類似,也可先組裝出一個dict后,再把該dict轉換為關鍵字參數傳進去
extra = {'city': 'Beijing', 'job': 'Engineer'} person('Jack', 24, city=extra['city'], job=extra['job']) #輸出:name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'} person('Jack', 24, **extra) #輸出:name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'},是上例的簡寫形式 # **extra表示把extra這個dict的所有key-value用關鍵字參數傳入到函數的**kw參數,kw將獲得一個dict # 注意kw獲得的dict是extra的一份拷貝,對kw的改動不會影響到函數外的extra
調用者可傳入不受限制的關鍵字參數
def person(name, age, **kw): if 'city' in kw: #函數內可以對關鍵字參數進行檢查 # 有city參數 pass if 'job' in kw: # 有job參數 pass print('name:', name, 'age:', age, 'other:', kw) person('Jack', 24, city='Beijing', addr='Chaoyang', zipcode=123456) #關鍵字參數是任意的