函数中的默认参数 - Python

default arguments in function - Python

所以,这里有一段代码:

def function(item, stuff = []):
    stuff.append(item)
    print stuff

function(1)
# print '[1]'

function(2)
# print '[1,2]'

据我了解,这表明在程序 运行 期间更改的默认值在每次函数调用时仍会更改。但是为什么这段代码:

def function(item, stuff  = 0):
    stuff  += item
    print stuff  

function(3)
function(3)

每 运行 秒打印“3”?

Python 中的列表是可变的:它们可以在创建后进行修改。这就是为什么当您调用第一个函数时 stuff 列表会增长,每次都是相同的列表对象。

另一方面,整数是不可变的。创建它们后,您无法更改它们。那么这是做什么的

a = 2
a += 1

是将“2”对象上的a标签去掉,改为附加到“3”对象上。

这就是为什么“0”对象(第二个函数的 stuff 参数的默认值)保持不变而每次都得到 3。