作者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/cn.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