小心可變的預設引數

2021-08-16 16:54:38 字數 581 閱讀 8734

python中的可變引數需要注意,這個問題看起來雖小,但是當其出現,就可能壓根不知道問題到底出現在**,為此而揪心費腦的花去幾天的時間也是極有可能的。

例如:

def f(x=):

print(x)

f()f()

f()

你以為的結果可能是,

[1]

[1][1]

而實際的結果是

[1]

[1, 1]

[1, 1, 1]

究其原因,是函式也是物件,預設引數是函式的乙個屬性。在上例中,函式物件中的屬性x,隨著f()沒有傳入引數的呼叫,而在發生改變。

取而代之的是你應該使用乙個標記值表示「沒有指定」來替換可變物件,如:

>>> def foo(x=none):

... if x is none:

... x =

... print x

>>> foo()

[1]>>> foo()

[1]

預設引數,命名引數,可變引數

def sayname name string pk unit sayname 其中預設引數為pk,所以此時輸出pk sayname dog 此時傳入引數dog,那麼就以你當前傳入的引數為準,輸出dogdef speed distance float time float float println...

函式的預設引數的大坑,引數的可變引數

廖雪峰的官網 預設引數很有用,但使用不當,也會掉坑里。預設引數有個最大的坑 在多次呼叫函式的過程中,預設引數的值可能在不知不覺中改變 這個,跟c 很不一樣。演示如下 def add end l return l 當你正常呼叫時,結果似乎不錯 add end 1,2,3 1,2,3,end add e...

python函式的預設引數請勿定義可變型別

經常會看到這樣一句 警告 default argument value is mutable 意思是告訴我們函式的定義中,使用可變型別做預設引數。那為什麼會有這個警告呢?可變型別 mutable 列表,字典 不可變型別 unmutable 數字,字串,元組 def fun a 1 print a i...