看板 Python 關於我們 聯絡資訊
Hi 各位先進好 小弟是初學者,請各位多多指教。小弟在看Lubanovic的Python教科書 有個地方不是很懂,如下: def buggy(arg,result=[]): result.append(arg) print(result) 上述函式若呼叫兩次, 串列會繼承前一次呼叫的值,若第一次引數a,第二次b 則串列為['a','b'] 但若為下述,則不會繼承前一次呼叫之值 def buggy(arg): result = [] result.append(arg) print(result) 小弟無法理解的是為何把result=[]寫在buggy括號內, 串列會繼承前次呼叫之值 雖然我自己寫會把result=[]寫在括號外... 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.160.214.170 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1568037973.A.A16.html
germun: define只會執行一次 而呼叫則是內部每次都執行 09/09 22:16
alvinlin: 第二種result是區域變數,函數結果就沒了 09/10 00:46
Ryspon: 上面的推文只回答了後半部,之所以會延續前一次呼叫的結果 09/10 20:20
Ryspon: 是因為,Python 只在定義函式的時候會對 default argument 09/10 20:20
Ryspon: 進行一次賦值,加上 list 是 mutable 才會造成那樣的結果 09/10 20:20
TitanEric: 樓上正解 09/10 20:28
somoskylin: 題外話不建議第一種default 09/10 22:25
somoskylin: 用none會比較好喔 09/10 22:26
aaron880221: 3樓正解,這個問題的名字叫mutable default argument 09/11 17:52
s860134: print(buggy.__defaults__) 你會發現新大陸 09/12 00:48
h888512: 感謝各位!! 09/13 12:55