Python中:def func(a,b=[]) 这种写法有什么坑?

def func(a,b=[]) 有什么陷阱?

def func(a,b=[]):

b.append(a)
return b

l1 = func(1)
l2 = func(2,[11,22])
l3 = func(3)


print(l1,l2,l3)
#执行结果: [1,3]   [11,22,2]   [1,3]

函数的第二个默认参数是一个list,当第一次执行的时候实例化了一个list,第三次执行还是用第一次执行的时候实例化的地址存储,所以第一和第三次执行的结果就是相同的,想每次执行只输出当前传入参数 ,默认参数应该设置为None。

下面这种情况:

def func(a,b=[]):
  b.append(a)
  print(b)

func(1)
func(2,[11,22,33])
func(3)

#执行结果: [1] [11,22,33,2] [1,3] ###此时每个func函数是立即打印所以会出现不同结果

posted @ 2020-06-08 11:00  Mr_zho  阅读(2653)  评论(0编辑  收藏  举报