python可变类型做默认参数
下面代码的输出结果是什么
def extendlist(val, list=[]):
list.append(val)
return list
list1 = extendlist(10)
list2 = extendlist(123, ['a', 'b', 'c'])
list3 = extendlist('a')
print(list1)
print(list2)
print(list3)
结果
[10, 'a']
['a', 'b', 'c', 123]
[10, 'a']
解析
extendlist函数有两个参数,一个val,一个list默认为空列表
list1和list3没有对第二个参数list赋值,所以都是用了默认的空列表,
虽然这个函数执行了3次但是这个默认列表的内存地址是不变的,
当可变类型作为参数的默认值时你可以把它当做一个全局变量就可以了,人如果不对这个默认参数赋值他就一直指向这个全局变量