我刚刚玩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,因为我们没有第二次调用它。
答案 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]