Python 函式 (關鍵字引數)

記憶殘留發表於2017-07-17

關鍵字引數

可變引數允許你傳入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

相關文章