最近在写python发现有个问题,函数的默认值是不可变的。
测试代码1
2
3
4
5
6def add_to_list(v, l = []):
l.append(v)
return l
print add_to_list(1)
print add_to_list(2)
期望返回:1
2[1]
[2]
事与愿违:1
2[1]
[1, 2]
why?
函数定义时候已经初始了函数默认值的对象,默认值实际已经是函数的一部分,每次调用函数,默认值都是同一个
怎么解决?
避免这种用法
或者这样调用?1
2print add_to_list(1, [])
print add_to_list(2, [])
显然违背了函数默认值的意义,换种写法:1
2
3
4
5def add_to_list(v, l = None):
if l is None:
l = []
l.append(v)
return l
在函数内初始化默认值可以,但是代码量也多了,或许只能折衷了。