python中函数的默认参数是空数组
函数的默认参数 如果为空数组:
def default_para_without_trap(para=[], value=0):
print(id(para))
para.append(value)
print(id(para))
return para
print('第一步')
print('函数返回值:{}'.format(default_para_without_trap(value=100)))
print('第二步')
print('函数返回值:{}'.format(default_para_without_trap(value=50)))
结果:
第一步
1652247234376
1652247234376
函数返回值:[100]
第二步
1652247234376
1652247234376
函数返回值:[100, 50]
可以看出指向的都是同一个内存地址,因为数组是可变容器,里面的值发生改变,但指向的内存地址没有发生改变,所以第二次调用的是第一次已经添加了数据的数组。
而不可变数据类型,因为它的值是如果改变了,内存地址也要相应的变化,所以不会存在这种情况。
所以应该在每次调用时初始化
def default_para_without_trap(para=None, value=0):
print(id(para))
if para is None:
para = []
print(id(para))
para.append(value)
print(id(para))
return para
print('第一步')
print('函数返回值:{}'.format(default_para_without_trap(value=100)))
print('第二步')
print('函数返回值:{}'.format(default_para_without_trap(value=50)))
第一步
1809481008
1743164737352
1743164737352
函数返回值:[100]
第二步
1809481008
1743164737352
1743164737352
函数返回值:[50]