python預設引數的坑以及最佳實踐

2021-08-29 09:59:09 字數 572 閱讀 8187

// an example

defaddend

(l=)

:"end"

)return l

print addend(

)#["end"]

print addend(

)#["end", "end"]坑!!!對一切的列表有記憶了,不是我們想要的

print的結果和想象中不同, 從上述呼叫結果發現,函式每次都記住了上次新增了『end』後的list,python函式在定義的時候,預設引數l的值就被計算出來了即,因為預設引數l也是乙個變數,它指向物件,每次呼叫該函式,如果改變 了l的內容,則下次呼叫時,預設引數的內容就變了,不再是函式定義時的了。

預設引數一定要是不可變引數

最佳實踐:當要傳入可變引數物件時,可用none

def

addend2

(l=none):

if l is

none

: l =

"end"

)return l

Python預設引數的坑

定義乙個函式,傳入乙個list,新增乙個end再返回 def add end l return l 正常呼叫時,結果似乎不錯 print add end 1,2,3 1,2,3,end 使用預設引數呼叫時,一開始結果也是對的,但是再次呼叫時,結果就不對了 print add end end prin...

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 當你使用預設引數呼叫時,一開始結果也是對的 add end end 但是,...

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 當你使用預設引數呼叫時,一開始結果也是對的 add end end 但是,...