Python 3.x 为什么这个python函数返回len=7而不是len=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 #-*-编码:

我在下面得到了这段代码,但即使调试了它,我也不明白为什么给我的是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
    #-*-编码: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对应;但对于其他人来说,你是个天才:)