函数的默认参数陷阱
例题1:
lst = []
def func(a,l = lst):
l.append(a)
print(l)
func(1) # [1]
func(2,[]) # [2]
func(3) # [1,3]
例题2:可变数据类型存在陷阱问题
def func(a,l = []): # 在函数定义的时候 创建了一个[] # 对于默认参数来说,[]只定义一次 l.append(a) print(l) func(1) func(2,[]) # 又创建了一个新的空列表,传给func,代替l=[]这个默认参数 func(3) func(4)
执行结果:
[1]
[2]
[1, 3]
[1, 3, 4]
例题3:不可变数据类型会随着函数执行完成而消失
def func2(a = 0): # 在函数定义的时候,创建了一个值 0,只有一个0,a永远不消失
a += 1 # a = 0 + 1 = 1 局部变量 会随着这个函数的调用而消失
print(a)
func2()
func2()
func2()
func2()
执行结果:
1
1
1
1