作者h888512 (速球勝負 + 45度角絕殺)
看板Python
標題[問題] 初學者的函式問題
時間Mon Sep 9 22:06:08 2019
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://webptt.com/m.aspx?n=bbs/Python/M.1568037973.A.A16.html
1F:推 germun: define只會執行一次 而呼叫則是內部每次都執行 09/09 22:16
2F:→ alvinlin: 第二種result是區域變數,函數結果就沒了 09/10 00:46
3F:推 Ryspon: 上面的推文只回答了後半部,之所以會延續前一次呼叫的結果 09/10 20:20
4F:→ Ryspon: 是因為,Python 只在定義函式的時候會對 default argument 09/10 20:20
5F:→ Ryspon: 進行一次賦值,加上 list 是 mutable 才會造成那樣的結果 09/10 20:20
6F:推 TitanEric: 樓上正解 09/10 20:28
7F:→ somoskylin: 題外話不建議第一種default 09/10 22:25
8F:→ somoskylin: 用none會比較好喔 09/10 22:26
9F:推 aaron880221: 3樓正解,這個問題的名字叫mutable default argument 09/11 17:52
10F:→ s860134: print(buggy.__defaults__) 你會發現新大陸 09/12 00:48
11F:→ h888512: 感謝各位!! 09/13 12:55