默認參數能夠簡化函數的調用,下降調用函數的難度
設置默認參數時,有幾點要注意:
1) 必選參數在前,默認參數在後,不然Python的解釋器會報錯
2) 如何設置默認參數
當函數有多個參數時,把變化大的參數放前面,變化小的參數放後面。變化小的參數就能夠做爲默認參數
定義默認參數函數app
def power(x, n=2): #函數有兩個參數:x和n,x是位置參數,n是默認參數,調用函數時,若是隻有一個參數傳入,則n被設定爲2 s = 1 while n > 0: n = n - 1 s = s * x return s
定義默認參數要牢記一點:默認參數必須指向不變對象
錯誤例子:函數
def add_end(L=[]): print(L) L.append('END') return L add_end() #輸出:[] add_end() #輸出:['END'] add_end() #輸出:['END', 'END'] #Python函數在定義時,默認參數L的值就被計算出來了,即[],由於默認參數L也是一個變量,它指向對象[] #若是函數內改變了L的內容,則下次調用時,默認參數的內容就變了,再也不是函數定義時的[]了 #就是說,第一次調用函數時,默認參數沒有賦值,所以L被賦值爲[],第二,三次調用時,L已經不爲空了,所以默認值[]就不會被再次被使用而是用L自己的值 #調用函數時,只有當默認參數爲空的時候,默認參數值纔有效,若是默認參數不爲空,即使調用函數時沒有顯性的賦值,默認參數值也不會被使用
正確例子:spa
def add_end(L=None): if L is None: L = [] L.append('END') return L #之因此要設計str、None這樣的不變對象是由於不變對象一旦建立,對象內部的數據就不能修改,這樣就減小了因爲修改數據致使的錯誤 #此外,因爲對象不變,多任務環境下同時讀取對象不須要加鎖,同時讀一點問題都沒有 #編寫程序時,要儘可能設計一個不變對象