python3 函数中默认参数遇到的坑**
一般情况下,默认参数定义为不可变类型,即指向不可变对象
python中的不可变对象如:字符串,元组,布尔,整形,浮点型
可变对象如:列表,字典,集合
看个例子:
def fun_list(val,list4=[]):
list4.append(val)
return list4
list1 = fun_list('b')
list2 = fun_list('a')
print(list1)
print(list2)
# 结果输出为:
['b', 'a']
['b', 'a']
上面的例中:在函数定义默认参数时,其实list4已经被定义为了变量并赋了初值空列表[],在第一次调用的时候是像list4中添加了字符’b’,此时list4为[‘b’],并把地址赋给了list1,再次调用时,继续向list4中添加’a’,并把地址赋给了list2,但是,list1的地址也指向list4的地址,所以打印出来的对象都是一样的