默认参数为可变类型的坑
程序中偶然遇到:
def f(x, l = [] ):
for i in range(x):
l.append(i*i)
print(l)
f(2) # l此时为[0,1]
f(3) # l此时为 [0, 1, 0, 1, 4]
f(3,l=[3,2]) # l此时传入参数了,以传入的为准
f(2) # l此时为 [0, 1, 0, 1, 4, 0, 1]
#执行结果:
[0, 1]
[0, 1, 0, 1, 4]
[3, 2, 0, 1, 4]
[0, 1, 0, 1, 4, 0, 1]
小结
python程序函数的默认参数只在定义阶段被赋值一次,调用时可以不用传值。建议把默认参数定义成不可变数据类型,定义成可变类型就会有上面程序的情况。