Python:List的Default参数中的表达式

时间:2015-04-06 17:50:56

标签: python list

我刚刚玩python列表,我发现了奇怪的行为。

这是我的代码。

def extendList(val, list=[]):
    list.append(val)
    return list

list1 = extendList(10)
list2 = extendList(123,[])
list3 = extendList('a')

print "list1 = %s" % list1
print "list2 = %s" % list2
print "list3 = %s" % list3

输出:

list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']

我期望相信的是,当我们调用list1=extendList(10)时,列表3输出可以包含带有'a'的10,因为10已经在函数参数的列表变量中(因为当函数是函数时,计算默认参数中的表达式定义,而不是在它被调用的时候。)但是为什么'a'会被附加到list1,因为我们没有第二次调用它。

1 个答案:

答案 0 :(得分:0)

来自Python文档:

  

重要警告:默认值仅评估一次。当默认值是可变对象(如列表,字典或大多数类的实例)时,这会有所不同。例如,以下函数会累积在后续调用中传递给它的参数:

def f(a, L=[]):
    L.append(a)
    return L

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