下面我得到了这段代码,但即使对它进行调试,我也无法理解为什么给出了7而不是6。
更准确地说,每次返回都会给出预期的结果:
ipdb> --Return-- ['a']ipdb> --Return-- ['a', 'a']ipdb> --Return-- ['a', 'a', 'a']但最终func() + func() + func()变成了['a', 'a', 'a', 'a', 'a', 'a', 'a']
为什么会有更多?
#!/usr/bin/python
# -*- coding: utf-8 -*-
def func(par=[]):
par.append("a")
return par
print(len(func() + func() + func()))发布于 2019-08-21 12:45:03
在执行func() + func() + func()时,Python必须将临时对象存储在堆栈上才能将它们添加到一起,这意味着您的代码相当于
a = func() # returns ['a']
b = func() # returns ['a', 'a'], but variable 'a' now holds ['a', 'a'] as well!
tmp = a + b
c = func() # return ['a', 'a', 'a']
d = tmp + c
return d由于可变的默认参数,在实际添加a+b之前,a和b都等于['a', 'a'],给出了['a', 'a', 'a', 'a'],4个元素,然后添加从第三个func()调用中得到的['a','a','a'],结果得到7个元素。
https://stackoverflow.com/questions/57591710
复制相似问题