python學(xué)習(xí)筆記,特做記錄,分享給大家,希望對大家有所幫助。
關(guān)鍵字參數(shù)
可變參數(shù)允許你傳入0個或任意個參數(shù),這些可變參數(shù)在函數(shù)調(diào)用時自動組裝為一個tuple。而關(guān)鍵字參數(shù)允許你傳入0個或任意個含參數(shù)名的參數(shù),這些關(guān)鍵字參數(shù)在函數(shù)內(nèi)部自動組裝為一個dict。請看示例:
def person(name, age, **kw):
print ('name:', name, 'age:', age, 'other:', kw)
person('Michael', 30)
函數(shù)person除了必選參數(shù)name和age外,還接受關(guān)鍵字參數(shù)kw。在調(diào)用該函數(shù)時,可以只傳入必選參數(shù):
運行結(jié)果如下:
name: Michael age: 30 other: {}
Process finished with exit code 0
也可以傳入任意個數(shù)的關(guān)鍵字參數(shù):
person('Evan', 29, city='shanghai')
person('Evan', 28, city='beijing', gender='M')
運行結(jié)果如下:
name: Evan age: 29 other: {'city': 'shanghai'}
name: Evan age: 28 other: {'city': 'beijing', 'gender': 'M'}
Process finished with exit code 0
關(guān)鍵字參數(shù)有什么用?它可以擴展函數(shù)的功能。
比如,在person函數(shù)里,我們保證能接收到name和age這兩個參數(shù),但是,如果調(diào)用者愿意提供更多的參數(shù),我們也能收到。
試想你正在做一個用戶注冊的功能,除了用戶名和年齡是必填項外,其他都是可選項,利用關(guān)鍵字參數(shù)來定義這個函數(shù)就能滿足注冊的需求。
和可變參數(shù)類似,也可以先組裝出一個dict,然后,把該dict轉(zhuǎn)換為關(guān)鍵字參數(shù)傳進去:
extra = {'city': 'beijing', 'gender': 'M'}
person('Jack', 27, city=extra['city'], gender=extra['gender'])
當(dāng)然,上面復(fù)雜的調(diào)用可以用簡化的寫法:
extra = {'city': 'beijing', 'gender': 'M'}
person('Jack', 27, **extra)
兩種寫法的運行結(jié)果是一樣的,但是明顯下面的方法方便省事。
extra表示把extra這個dict的所有key-value用關(guān)鍵字參數(shù)傳入到函數(shù)的kw參數(shù),kw將獲得一個dict,注意kw獲得的dict是extra的一份拷貝,對kw的改動不會影響到函數(shù)外的extra。
歡迎關(guān)注公眾號「網(wǎng)羅開發(fā)」,可領(lǐng)取python測試demo和學(xué)習(xí)資源,大家一起學(xué)python,網(wǎng)羅天下方法,方便你我開發(fā)。