關鍵字引數
可變引數允許你傳入0個或者任意個引數,這些可變引數在函式呼叫時會自動組裝成一個tuple,而關鍵字引數允許你傳入0個或者任意個含引數名的引數,這些引數在函式內部自動組裝成為一個dict
def person(name,age,**kw): print('name:',name,'age:',age,'other:',kw)
函式person除了必選引數name和age外,還接受關鍵字引數kw。在呼叫的時候。可以只傳入必選引數:
print person('Michael', 30) #=>('name:', 'Michael', 'age:', 30, 'other:', {})
也可以傳入任意個數的關鍵字引數:
print person('Bob', 35, city='Beijing') #=>('name:', 'Bob', 'age:', 35, 'other:', {'city': 'Beijing'}) print person('Adam', 45, gender='M', job='Engineer') #=>('name:', 'Adam', 'age:', 45, 'other:', {'gender': 'M', 'job': 'Engineer'})
關鍵字引數它可以擴充套件函式的功能。比如,在person函式裡,我們保證能接收到name和age這兩個引數,但是,如果呼叫者願意提供更多的引數,我們也能收到。試想你正在做一個使用者註冊的功能,除了使用者名稱和年齡是必填項外,其他都是可選項,利用關鍵字引數來定義這個函式就能滿足註冊的需求。
#和可變引數類似,也可以先組裝出一個dict,然後,把該dict轉換為關鍵字引數傳進去:
extra = {'city': 'Beijing', 'job': 'Engineer'} print person('Jack', 24, city=extra['city'], job=extra['job']) #=>('name:', 'Jack', 'age:', 24, 'other:', {'city': 'Beijing', 'job': 'Engineer'})
也可以簡化成這樣
print person('Jack', 24, **extra)
**extra表示把extra這個dict的所有key-value用關鍵字引數傳入到函式的**kw引數,kw將獲得一個dict,注意kw獲得的dict是extra的一份拷貝,對kw的改動不會影響到函式外的extra。
參考:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431752945034eb82ac80a3e64b9bb4929b16eeed1eb9000