默认参数为可变类型的坑

默认参数为可变类型的坑

程序中偶然遇到:

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

原文地址:https://www.cnblogs.com/liao-lin/p/7106019.html