函数的默认参数陷阱

例题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

 

 

posted @ 2019-02-02 02:24  小萍瓶盖儿  阅读(142)  评论(0编辑  收藏  举报