为什么我的函数会继续返回更长的列表?

时间:2013-02-11 02:09:40

标签: python

我打开了我的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]
>>> 

发生了什么事?为什么函数返回的列表越长,我调用函数越多?每次调用函数时都不应该创建新的本地列表吗?

1 个答案:

答案 0 :(得分:2)

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

  

在函数定义时计算默认参数值   执行。这意味着当表达式被评估一次   定义函数,并使用相同的“预先计算”值   每次通话。这对了解何时来说尤为重要   default参数是一个可变对象,例如列表或字典:   如果函数修改了对象(例如通过将项附加到a   列表),默认值实际上已修改。这通常不是   是什么意思。