python 默认值的陷阱

def test(a, l = []):
    for i in range(a):
        l.append(i)
    print(l)
>>> test(2)
>>> test(2, [1])
>>> test(3)

输出结果

[0, 1]
[1, 0, 1]
[0, 1, 0, 1, 2]

最后一行为什么是[0, 1, 0, 1, 2], 而不是期望中的[0, 1, 2]
官方文档是这样解释的

Default values are computed once, then re-used.

因为默认值在函数定义的时候被初始化,而且只初始化一次, 后面重复使用。又因为列表可变的,顾不指定默认值的时候会不断的追加到默认值列表中。


Published

Category

python

Tags

Stay in Touch

Friendship Links