默認參數

默認參數能夠簡化函數的調用,下降調用函數的難度

設置默認參數時,有幾點要注意:
  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這樣的不變對象是由於不變對象一旦建立,對象內部的數據就不能修改,這樣就減小了因爲修改數據致使的錯誤
#此外,因爲對象不變,多任務環境下同時讀取對象不須要加鎖,同時讀一點問題都沒有
#編寫程序時,要儘可能設計一個不變對象
相關文章
相關標籤/搜索