0

我打开了我的 python 解释器,编码并运行了以下函数。

>>> def crazy_function(my_list=[]):
...     my_list.append(0)
...     return my_list
... 
>>> crazy_function()
[0]
>>> crazy_function()
[0, 0]
>>> crazy_function()
[0, 0, 0]
>>> crazy_function()
[0, 0, 0, 0]
>>> crazy_function()
[0, 0, 0, 0, 0]
>>> crazy_function()
[0, 0, 0, 0, 0, 0]
>>> crazy_function()
[0, 0, 0, 0, 0, 0, 0]
>>> 

到底是怎么回事?为什么函数返回的列表越调用函数越长?每次调用函数时不应该创建一个新的本地列表吗?

4

1 回答 1

2

将可变对象分配给函数参数的默认值是一个常见错误。引用文档

执行函数定义时评估默认参数值。这意味着表达式在定义函数时被计算一次,并且每次调用都使用相同的“预计算”值。当默认参数是可变对象(例如列表或字典)时,这一点尤其重要:如果函数修改了对象(例如,通过将项目附加到列表中),则默认值实际上已被修改。这通常不是预期的。

于 2013-02-11T02:11:50.827 回答