题目

def f(x, l = []):
for i in range(x):
l.append(i * i)
print(l)

f(2)
f(3, [3, 2, 1])
f(3)

分析

由于函数f的默认参数 l 是列表,因此是可变数据类型,当f(2)调用后f()后,l变为[0, 1],当f(3, [3, 2, 1])调用时,由于使用的是自定义的参数,所以这次默认参数 l 的值不变,仍是[0, 1],当使用f(3)调用后,由于没有传自定义参数,因此使用默认参数 l = [0, 1],所以最后的结果是[0, 1, 0, 1, 4]

结果

[0, 1]
[3, 2, 1, 0, 1, 4]
[0, 1, 0, 1, 4]