Python 3.x 为什么这个python函数返回len=7而不是len=6?
我在下面得到了这段代码,但即使调试了它,我也不明白为什么给我的是7而不是6 更准确地说,当我去毛刺时,每个回报都会给我带来预期的结果:Python 3.x 为什么这个python函数返回len=7而不是len=6?,python-3.x,Python 3.x,我在下面得到了这段代码,但即使调试了它,我也不明白为什么给我的是7而不是6 更准确地说,当我去毛刺时,每个回报都会给我带来预期的结果: 第一个func调用:ipdb>--返回--['a'] 第二个func调用:ipdb>--返回--['a','a'] 第三个func调用:ipdb>--返回--['a','a','a'] 但是最后func()+func()+func()变成['a','a','a','a','a','a','a'] 为什么还有一个a #/usr/bin/python #-*-编码:
ipdb>--返回--['a']
ipdb>--返回--['a','a']
ipdb>--返回--['a','a','a']
func()+func()+func()
变成['a','a','a','a','a','a','a']
为什么还有一个a
#/usr/bin/python
#-*-编码:utf-8-*-
def func(par=[]):
追加(“a”)
返回票面金额
打印(len(func()+func()+func())
当执行func()+func()+func()
时,Python必须在堆栈上存储临时对象以将它们添加到一起,这意味着您的代码相当于
a=func()#返回['a']
b=func()#返回['a',a'],但变量'a'现在也包含['a',a']!
tmp=a+b
c=func()#返回['a','a','a']
d=tmp+c
返回d
由于可变的默认参数,在实际添加
a+b
之前,a
和b
都等于['a','a']
,给你['a','a','a']
,4个元素,然后你添加['a','a','a']
你从第三次func()
调用中得到的,结果得到7个元素。必须将tmp=x+y与tmp=a+b对应;但对于其他人来说,你是个天才:)