如果使用的参数默认值是可变的(例如列表),则可能引发烦人的问题。当执行def时,默认参数值只能使用一次,在函数调用期间将保留此关联。这意味着参数名相关联的默认对象的变化,将在函数调用间保持一致。如下例子:
def func(element,listParam=[])
listParam.append(element)
return listParam
调用:
>>>func(1)
[1]
>>>func(2)
[1,2]
>>>func(3)
[1,2,3]
>>>func(4,[7,8,9])
[7,8,9,4]
>>>func(5)
[1,2,3,5]
第一次调用func函数时使用listParam的默认值,在列表中填加1,返回[1]。使用listParam的默认值进行第二次调用时,即function(2),2仍会连接到默认对象上。但在前面的调用中该对象修改过。如果该对象是可变的并且修改过,在所有的调用中都保留这些修改。当不使用默认值时,就会按照传入的参数值进行变化。所以一般不要使用可变的默认值。