python函式傳參預設引數的陷阱 可變資料型別

2021-10-03 02:49:17 字數 438 閱讀 8552

python在函式定義時可以定義預設引數,即給定乙個預設值,每次呼叫函式時如果不指定該引數的值,就取用這個預設值。

但是,如果這個預設引數設定的是個可變資料型別,然後又在函式中改變了這個值,那就會出問題了,看下面這個函式

def

fun(x, y=5)

: y+=

1print

(x+y)

這個函式,如果我不輸入y,每次我是想輸出x+5+1,但是實際的效果卻是

fun(3)

fun(4)

fun(5)

# 9# 10

# 11

可以發現,函式儲存下了這個引數,這是python在內部共用記憶體的結果。

所以,在定義函式是應該規避這個問題,在函式中不要更改預設引數的值,否則會對後面的呼叫產生影響

Python 函式引數傳參方式

目錄 函式定義 呼叫 函式引數傳參 函式引數可變引數傳參 例子 引數解構 呼叫 預設值引數傳參 關鍵字引數的可變引數 有位置可變引數和關鍵字可變引數位置可變引數在形參前使用乙個星號 關鍵字可變引數在形參前使用兩個星號 位置可變引數和關鍵字可變引數都可以收集若干個實參,位置可變引數收集形成乙個tupl...

python的預設引數 Python 預設引數的坑

話不多說,上 def fun x,a b c b b x print f a b c fun 1 fun 2 fun 3 我們在這段 中 定義了乙個位置引數 x,乙個乙個預設引數 a,a 的預設值為空列表,另乙個預設引數 b,b 的預設值為乙個空字串,在函式體中定義了乙個變數 c,並也給 c 傳遞了...

python傳參方式 Python函式引數傳遞方式

python 函式引數傳遞方式並不像其他語言那樣是 指標 引用 和 值傳遞,而是 物件引用傳遞,本質上是 引用傳遞 可以說 python 中不存在 值傳遞,而是存在 不可變物件 容易誤判的操作 容易被誤認為是 引用傳遞 的操作 def case1 l list int none alist list...