📅  最后修改于: 2023-12-03 15:12:41.676000             🧑  作者: Mango
以下代码段的输出是什么?
def extendList(val, list=[]):
list.append(val)
return list
list1 = extendList(10)
list2 = extendList(123,[])
list3 = extendList('a')
print("list1 =", list1)
print("list2 =", list2)
print("list3 =", list3)
list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']
该代码段中extendList
函数有两个参数val
和list
,其中list
具有默认值[]
。如果没有给定list
参数的值,则使用默认值[]
。但是这里有一个重大错误,即默认值被看作是一个对象,而在串联函数调用时它不会重新赋值,提供的列表作为默认值在列表被修改时会持续修改。
在我们的示例中,第一次调用extendList
没有给定一个list
,将默认值[]
作为list变量的值。我们添加10到默认列表中,结果列表为[10]。
在第二次调用中,我们给list参数传递了一个新的列表,即[123]
。 此时我们不会修改这个列表,结果列表为[123]。
在第三次调用extendList
时,仍然使用默认列表,该列表现在已经被修改为[10]。我们向其添加'a'
,结果列表为[10, a
]。
因此,最终输出是:
list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']