首先來看這樣一段**
def
add_list
(ori_list=
, element=
none):
return ori_list
list_1 = add_list(element=
'hehe'
)print
( list_1)
list_2 = add_list(element=
'haha'
)print
(list_2)
接果顯示
[
'hehe'][
'hehe','haha'
]
這時,我們會發現輸出結果和我們想的不一樣
為什麼會這樣呢。
我們都知道深淺拷貝,我個人認為這個問題深淺拷貝的底層原因差不多。
我們來看下面一段**
>>
>num = 1
>>
>id(num)
140721794998928
>>
>num += 1
>>
>num
2>>
>id(num)
140721794998960
>>
>id(1)
140721794998928
>>
>id(2)
140721794998960
對於傳統語言,上面這段**的執行方式將會是,先在記憶體中申明乙個num的變數,然後將1存入變數p所在記憶體。執行加法操作的時候得到2的結果,將2這個數值再次存入到num所在記憶體位址中。可見整個執行過程中,變化的是變num所在記憶體位址上的值
但是,從上面這段**中,python實際上是現在執行記憶體中建立了乙個1的物件,並將num指向了它。在執行加法操作的時候,實際上通過加法操作得到了乙個2的新物件,並將num指向這個新的物件。可見整個執行過程中,變化的是num指向的記憶體
這也體現了python中萬物皆物件的思想,我們實際建立的是乙個int物件,我們的num指向這個int物件
以上簡單來說呢,可以理解成,python函式的引數預設值,是在編譯階段就繫結的。
我們在程式設計時盡量避免這個bug就好
方法引數 預設值 引數的預設值陷阱!
今日分享 引數的預設值陷阱 下面定義的函式f,其引數d是乙個預設引數,且為字典型別 def f a,d print f a print f d do some process return d 最後返回字典d,下面呼叫函式f ret dict f 1 第二個引數d使用預設值 ret dict b 2...
lua 函式 預設值 定義函式引數的預設值
如果你想要命名引數和預設值,如php或python,你可以使用表構造函式呼叫你的函式 myfunction 函式本身可以有這樣的簽名 function myfunction t setmetatable t,local a,c t 1 or t.a,t 2 or t.b,t 3 or t.c fun...
函式(引數,預設值)
js定義函式引數沒有非常嚴格的要求,可以有也可以沒有,在呼叫的時候也是,引數可以有可以沒有,也可以和定義時的引數個數不一致 沒有給count傳入引數,預設為10 也可以直接在引數中給count賦值 但是特別注意的是不能給count傳入0,因為0與undefined都是false,因此count傳入的...