Python陷阱一则
可能火星了,不过我确实是才知道。
当Python函数参数的默认值为列表这样的可见对象,只会被初始化一次,并非每次调用都会初始化为[]
例子:
def test(t=[]):
t.append(2)
print t
test()
test()
t.append(2)
print t
test()
test()
输出为:
[2]
[2,2]
正确的写法是:
def test(t=None):
if t==None: t=[]
if t==None: t=[]
我在Groovy和Ruby里面也试了一下,都没有这个问题。