默认参数为可变类型的坑
程序中偶然遇到:
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程序函数的默认参数只在定义阶段被赋值一次,调用时可以不用传值。建议把默认参数定义成不可变数据类型,定义成可变类型就会有上面程序的情况。