看Default Parameter Values in Python这篇文章时, 下面示例:
>>> def function(data=[]): ... data.append(1) ... return data ... >>> function() [1] >>> function() [1, 1] >>> function() [1, 1, 1] >>> id(function()) 3076744140L >>> id(function()) 3076744140L
说明python实际上是先把默认参数的值计算出来,以后每次调用都是用以前计算出的值. 这里每次function调用使用同一个data, 这里的data是可变对象, 因此data的值不断append.
那么下面的例子:
>>> def myfunc(value=None): ... if(value is None): ... value=[] ... value.append(5) ... return value ... >>> myfunc() [5] >>> myfunc() [5] >>> id(myfunc()) 3070938636L >>> id(myfunc()) 3070938284L >>> id(myfunc()) 3070938284L
None是一个常量, 是一个不可变对象, 每次调用myfunc()时value都是None,但是id(myfunc())的值为什么不同呢?
参考:Python的默认参数
默认参数只被计算一次。
上者是修改,下者是赋值,不一样:一个是对一个对象操作,一个是更替对象!