def
add_end(list=):
return list
# 預設引數多次呼叫,竟然每次結果不一樣
n = 0
while n < 5:
print n, add_end()
n += 1
列印結果:
很多初學者很疑惑,預設引數是[ ],但是函式似乎每次都「記住了」上次新增了'end'後的list。
原因解釋如下:
python函式在定義的時候,預設引數list的值就被計算出來了,即[ ],因為預設引數l也是乙個變數,它指向物件[ ],每次呼叫該函式,如果改變了list的內容,則下次呼叫時,預設引數的內容就變了,不再是函式定義時的[ ]了。
所以,定義預設引數要牢記一點:預設引數必須指向不變物件!
要修改上面的例子,我們可以用none這個不變物件來實現:
def列印結果:add_end2(list=none):
if list is
none:
list =
return list
"**************"
n = 0
while n < 5:
print n, add_end2()
n += 1
為什麼要設計str、none這樣的不變物件呢?因為不變物件一旦建立,物件內部的資料就不能修改,這樣就減少了由於修改資料導致的錯誤。此外,由於物件不變,多工環境下同時讀取物件不需要加鎖,同時讀一點問題都沒有。我們在編寫程式時,如果可以設計乙個不變物件,那就盡量設計成不變物件。
python 預設引數 Python預設引數有坑?
最近有小夥伴在面試中遇到了 關於函式預設引數的坑 的題目,少數夥伴對此問題理得不是太清楚,今天匯智妹請到匯智動力高階教師鄧老師為大家詳細講解一下,幫助不太清楚的小夥伴清晰的梳理一遍。鄧老師本次主要從以下三點來講解 什麼是預設引數?函式預設引數的坑是什麼?函式預設引數為什麼會有坑?一 什麼是預設引數 ...
python預設引數
預設引數很有用,但使用不當,也會掉坑里。預設引數有個最大的坑,演示如下 先定義乙個函式,傳入乙個list,新增乙個end再返回 def add end l return l當你正常呼叫時,結果似乎不錯 add end 1,2,3 1,2,3,end add end x y z x y z end 當...
Python 預設引數
定義函式的時候,還可以有預設引數。例如python自帶的int 函式,其實就有兩個引數,我們既可以傳乙個引數,又可以傳兩個引數 int 123 123 int 123 8 83int 函式的第二個引數是轉換進製,如果不傳,預設是十進位制 base 10 如果傳了,就用傳入的引數。可見,函式的預設引數...