續(xù):第(11)節(jié)
本文所有引用均來自廖雪峰老師的網(wǎng)站。轉載請說明出處。
-
默認參數(shù)
def power(x, n=2):
……
上面所示的'n=2'就是在傳入?yún)?shù)缺少參數(shù)n的時候默認的值。注意:必選參數(shù)在前,默認參數(shù)在后,否則Python的解釋器會報錯
-
可變參數(shù)
——傳入的參數(shù)個數(shù)是可變的。
例如計算a2+b2+c^2+……傳統(tǒng)方法
def calc(numbers):
……
其中numbers是一個list或者tuple。調(diào)用的時候需要先組裝出一個list或者tuple:
calc([1,2,3])可變參數(shù)
def calc(*numbers):
……
在函數(shù)內(nèi)部,參數(shù)numbers接收到的是一個tuple,因此,函數(shù)代碼完全不變。但是,調(diào)用該函數(shù)時,可以傳入任意個參數(shù),包括0個參數(shù)。
-
當然如果定義了一個list或者tuple,也可以這樣:
>>> nums = [1, 2, 3]
>>> calc(nums[0], nums[1], nums[2])- 上面這種寫法太繁瑣,Python允許直接在list或tuple前面加一個
*號,把list或tuple的元素變成可變參數(shù)傳進去:
>>> nums = [1, 2, 3]
>>> calc(*nums)
*nums表示把nums這個list的所有元素作為可變參數(shù)傳進去。這種寫法相當有用,而且很常見。
- 上面這種寫法太繁瑣,Python允許直接在list或tuple前面加一個
-
關鍵字參數(shù)
關鍵字參數(shù)允許你傳入0個或任意個含參數(shù)名的參數(shù),這些關鍵字參數(shù)在函數(shù)內(nèi)部自動組裝為一個dict。
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw) //kw==keyword>>>person('Michael', 30) name: Michael age: 30 other: {} >>> person('Adam', 45, gender='M', job='Engineer') name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
關鍵字參數(shù)有什么用?它可以擴展函數(shù)的功能。比如,在person函數(shù)里,我們保證能接收到name和age這兩個參數(shù),但是,如果調(diào)用者愿意提供更多的參數(shù),我們也能收到。試想你正在做一個用戶注冊的功能,除了用戶名和年齡是必填項外,其他都是可選項,利用關鍵字參數(shù)來定義這個函數(shù)就能滿足注冊的需求。
和可變參數(shù)類似,也可以先組裝出一個dict,然后,把該dict轉換為關鍵字參數(shù)傳進去:
d
>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, city=extra['city'], job=extra['job'])
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
上面寫法可以簡化:
>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, **extra)
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
**extra表示把extra這個dict的所有key-value用關鍵字參數(shù)傳入到函數(shù)的**kw參數(shù),kw將獲得一個dict,注意kw獲得的dict是extra的一份拷貝,對kw的改動不會影響到函數(shù)外的extra。
4.參數(shù)組合
在Python中定義函數(shù),可以用必選參數(shù)、默認參數(shù)、可變參數(shù)、關鍵字參數(shù)和命名關鍵字參數(shù),這5種參數(shù)都可以組合使用。但是請注意,參數(shù)定義的順序必須是:必選參數(shù)、默認參數(shù)、可變參數(shù)、命名關鍵字參數(shù)和關鍵字參數(shù)。
對于任意函數(shù),都可以通過類似func(*args, **kw)的形式調(diào)用它,無論它的參數(shù)是如何定義的。
要注意定義可變參數(shù)和關鍵字參數(shù)的語法:
*args是可變參數(shù),args接收的是一個tuple;
**kw是關鍵字參數(shù),kw接收的是一個dict。
- end -