关于最不令人吃惊:在Python中使用可变类型作为默认参数的含义是什么?

What are the implications of using mutable types as default arguments in Python?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicates:
Why the “mutable default argument fix” syntax is so ugly, asks python newbie
least astonishment in python: the mutable default argument

下面是一个例子。

1
2
def list_as_default(arg = []):
    pass


从http:/ / / / / defaultargumentvalues.html pytut www.network-theory.co.uk文档

默认值是只读一次评价。这使差分时,默认是一个对象,如一mutable列表、字典,类实例或酒。例如,下面的函数传递的参数accumulates在随后的调用:

1
2
3
4
5
6
7
def f(a, L=[]):
    L.append(a)
    return L

print f(1)
print f(2)
print f(3)

这将打印

1
2
3
[1]
[1, 2]
[1, 2, 3]

如果你不想默认的后续调用之间的共享,你可以写这样的额外功能:

1
2
3
4
5
def f(a, L=None):
    if L is None:
        L = []
    L.append(a)
    return L