Python中定義函式時引數有預設值的小陷阱

2021-09-08 12:13:24 字數 696 閱讀 2411

在定義函式的時候,如果函式的引數有預設值,有兩種型別的引數,一種是整數,字串這種不可變型別,另一種是列表這種可變型別,對於第一種情況沒有什麼特殊的地方,但是對於可變型別,有乙個微妙的小陷阱。

可變型別以及小陷阱:

#

coding=utf-8

return

list1

[1][1, 2]

[1, 2, 6]

list2 = [6, 7]

[6, 7, 1]

[6, 7, 1,9]

原因:在建立上面的函式時,list1引數被設定為引用乙個新的列表,之後,在僅使用第乙個引數呼叫該函式(即第二個使用預設引數)時,預設的列表都將是函式本身建立時指定的那個列表,因此將不會再有新的列表得以建立。

我們所期待的是,在每次僅使用第乙個引數呼叫該函式時,都會建立乙個新的空列表,下面進行改動:

#

coding=utf-8

ifnot

list1:

list1 =

return

list1

[1][2]

[6]list2 = [6, 7]

[6, 7, 1]

[6, 7, 1,9]

Python中定義函式時引數有預設值的小陷阱

在定義函式的時候,如果函式的引數有預設值,有兩種型別的引數,一種是整數,字串這種不可變型別,另一種是列表這種可變型別,對於第一種情況沒有什麼特殊的地方,但是對於可變型別,有乙個微妙的小陷阱。可變型別以及小陷阱 coding utf 8 return list1 1 1,2 1,2,6 list2 6...

Python中定義函式時引數有預設值的小陷阱

在定義函式的時候,如果函式的引數有預設值,有兩種型別的引數,一種是整數,字串這種不可變型別,另一種是列表這種可變型別,對於第一種情況沒有什麼特殊的地方,但是對於可變型別,有乙個微妙的小陷阱。可變型別以及小陷阱 return list1 list2 6,7 ps 遇到問題沒人解答?需要python學習...

python定義函式時的引數 呼叫函式時的傳參

一 定義函式 1 位置引數 直接定義引數 2 預設引數 或者關鍵字引數 引數名 預設值 3 位置引數必須在預設引數之前 二 呼叫函式 1 按位置傳,直接寫引數的值 2 按關鍵字傳,關鍵字 值 3 位置引數必須在關鍵字引數之前 4 關鍵字引數可在 args和 kwargs之前 注 呼叫時,無論定義的函...