經常會看到這樣一句**警告:
default argument value is mutable
意思是告訴我們函式的定義中,使用可變型別做預設引數。
那為什麼會有這個警告呢?
可變型別(mutable):列表,字典
不可變型別(unmutable):數字,字串,元組
def
fun(a=
):1)
print
(a)if __name__ ==
"__main__"
: fun(
) fun(
)>>
>[1
][1,
1]
可以發現,預設引數定義可變型別之後,在第二次乃至更多次地呼叫同乙個函式時,預設引數彷彿失去了效果。
此時,在需要重複呼叫同乙個函式的場景中,就非常容易導致問題,並且該問題不易察覺。在debug的時候就會表現成明明沒有引數傳進來,但是函式引數會有值,並且執行了不應該執行的操作。
我的理解:
我們定義的函式本身是乙個function的例項化物件,每當我們進行函式的定義時,就是建立了乙個function的例項化物件,而預設引數就是其屬性。
在沒有傳入引數,以預設引數形式呼叫,並且改變了函式物件的屬性值時,改變的屬性值被儲存下來,當第二次呼叫同乙個物件時,屬性值已經發生了改變。
type(fun)
>>> function
def
fun(a=
none):
if a is
none
: a =
1)print
(a)if __name__ ==
"__main__"
: fun(
) fun(
)>>
>[1
][1]
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預設引數有坑?
最近有小夥伴在面試中遇到了 關於函式預設引數的坑 的題目,少數夥伴對此問題理得不是太清楚,今天匯智妹請到匯智動力高階教師鄧老師為大家詳細講解一下,幫助不太清楚的小夥伴清晰的梳理一遍。鄧老師本次主要從以下三點來講解 什麼是預設引數?函式預設引數的坑是什麼?函式預設引數為什麼會有坑?一 什麼是預設引數 ...
Python函式預設引數值
python的函式機制提供了可選引數的功能,可選引數需要放在引數列表的後幾個引數。當呼叫這些函式時,如果不想設定這些引數,就可以不用設定而直接使用函式定義的時候設定的引數預設值。同樣的,呼叫函式的時候也可以重新設定引數,這將覆蓋預設設定的引數。def func x,y 2 print x y fun...