代码:3.6.3
函数缺省形参如果是可变类型,那么函数内部的操作真的会影响省略缺省参数时的使用情况。
def f(l=[]): # 其实这里写的时候pycharm就会有警告提示:默认参数是可变的
l.append(1)
return l
# 改变了默认参数的值
print(f())
# 当使用默认参数时的函数调用会受影响
print(f())
# 传入参数时的函数调用不受影响
print(f([3, 3]))
# 结果:
# [1]
# [1, 1]
# [3, 3, 1]
应该用下面这种格式来避免(其他可变类型类似)
def f(l=None):
# 在内部给l赋值
l = l or []
l.append(1)
return l
print(f())
print(f())
print(f([3, 3]))
# 结果:
# [1]
# [1]
# [3, 3, 1]