python-3.x - 为什么这个 python 函数返回 len=7 而不是 len=6?

标签 python-3.x

我在下面得到了这段代码,但即使调试它,我也不明白为什么给出 7 而不是 6。

更准确地说,当我调试每个返回时都会给我预期的结果:

  1. 第一个函数调用:ipdb> --Return-- ['a']
  2. 第二个函数调用:ipdb> --Return-- ['a', 'a']
  3. 第三个函数调用: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之前,ab都等于[' 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/

相关文章:

python - 在 Python 中随机化句子

python - 读取文件直到python中的特定字符

python - Anaconda 已安装但无法启动 Navigator

python - Mac 上的 PyLatex 和 pdflatex

Python3.4 datetime.today() 和 datetime.now()

python - 一列的 Pandas 平均值,按其他列的值

python-3.x - 将 jupyter notebook 转换为幻灯片时,绘图图不显示

python - 元类和何时/如何调用函数

python - 使用 Pandas 将三个或更多数据帧合并为单个数据帧并保留空值

python - 如何捕获 IllegalMonthError