定義函數(shù)的時候,我們把參數(shù)的名字和位置確定下來,函數(shù)的接口定義就完成了。對于函數(shù)的調(diào)用者來說,只需要知道如何傳遞正確的參數(shù),以及函數(shù)將返回什么樣的值就夠了,函數(shù)內(nèi)部的復雜邏輯被封裝起來,調(diào)用者無需了解。
Python的函數(shù)定義非常簡單,但靈活度卻非常大。除了正常定義的必選參數(shù)外,還可以使用默認參數(shù)、可變參數(shù)和關鍵字參數(shù),使得函數(shù)定義出來的接口,不但能處理復雜的參數(shù),還可以簡化調(diào)用者的代碼。
默認參數(shù)
我們?nèi)砸跃唧w的例子來說明如何定義函數(shù)的默認參數(shù)。先寫一個計算x2的函數(shù):
def power(x): return x * x
當我們調(diào)用power函數(shù)時,必須傳入有且僅有的一個參數(shù)x:
>>> power(5)25>>> power(15)225
現(xiàn)在,如果我們要計算x3怎么辦?可以再定義一個power3函數(shù),但是如果要計算x4、x5……怎么辦?我們不可能定義無限多個函數(shù)。
你也許想到了,可以把power(x)修改為power(x, n),用來計算xn,說干就干:
def power(x, n): s = 1 while n > 0: n = n - 1 s = s * x return s
對于這個修改后的power函數(shù),可以計算任意n次方:
>>> power(5, 2)25>>> power(5, 3)125
但是,舊的調(diào)用代碼失敗了,原因是我們增加了一個參數(shù),導致舊的代碼無法正常調(diào)用:
>>> power(5)Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: power() takes exactly 2 arguments (1 given)
這個時候,默認參數(shù)就排上用場了。由于我們經(jīng)常計算x2,所以,完全可以把第二個參數(shù)n的默認值設定為2:
def power(x, n=2): s = 1 while n > 0: n = n - 1 s = s * x return s
這樣,當我們調(diào)用power(5)時,相當于調(diào)用power(5, 2):
>>> power(5)25>>> power(5, 2)25
而對于n > 2的其他情況,就必須明確地傳入n,比如power(5, 3)。
從上面的例子可以看出,默認參數(shù)可以簡化函數(shù)的調(diào)用。設置默認參數(shù)時,有幾點要注意:
一是必選參數(shù)在前,默認參數(shù)在后,否則Python的解釋器會報錯(思考一下為什么默認參數(shù)不能放在必選參數(shù)前面);
二是如何設置默認參數(shù)。
當函數(shù)有多個參數(shù)時,把變化大的參數(shù)放前面,變化小的參數(shù)放后面。變化小的參數(shù)就可以作為默認參數(shù)。
使用默認參數(shù)有什么好處?最大的好處是能降低調(diào)用函數(shù)的難度。
舉個例子,我們寫個一年級小學生注冊的函數(shù),需要傳入name和gender兩個參數(shù):
def enroll(name, gender): print 'name:', name print 'gender:', gender
新聞熱點
疑難解答
圖片精選