📜  门| GATE-CS-2006 |问题17(1)

📅  最后修改于: 2023-12-03 15:12:41.676000             🧑  作者: Mango

问题17

以下代码段的输出是什么?

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函数有两个参数vallist,其中list具有默认值[]。如果没有给定list参数的值,则使用默认值[]。但是这里有一个重大错误,即默认值被看作是一个对象,而在串联函数调用时它不会重新赋值,提供的列表作为默认值在列表被修改时会持续修改。

在我们的示例中,第一次调用extendList没有给定一个list,将默认值[]作为list变量的值。我们添加10到默认列表中,结果列表为[10]。

在第二次调用中,我们给list参数传递了一个新的列表,即[123]。 此时我们不会修改这个列表,结果列表为[123]。

在第三次调用extendList时,仍然使用默认列表,该列表现在已经被修改为[10]。我们向其添加'a',结果列表为[10, a]。

因此,最终输出是:

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