我在下面得到了这段代码,但即使调试它,我也不明白为什么给出 7 而不是 6。
更准确地说,当我调试每个返回时都会给我预期的结果:
- 第一个函数调用:
ipdb> --Return-- ['a']
- 第二个函数调用:
ipdb> --Return-- ['a', 'a']
- 第三个函数调用:
ipdb> --Return-- ['a', 'a', 'a']
但最后 func() + func() + func()
变成了 ['a', '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()))
最佳答案
当执行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 个元素,然后你添加 [' a','a','a']
您从第 3 个 func()
调用中得到,结果得到 7 个元素。
关于python-3.x - 为什么这个 python 函数返回 len=7 而不是 len=6?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57591710/