当执行以下代码时:
def a(b=[]):
b.append('hi')
print(b)
a()
a()
执行结果:
['hi']
['hi', 'hi']
为什么会这样呢?
函数的定义相当于一次类型构造,默认值只在此时解析一次。而函数调用时不会重新执行默认参数的构造。所以,如果使用了字典,列表这样的可变类型。而又要在函数体内修改它,可能会出现意想不到的效果
解决方法:
def add_end(L=None):
if L is None:
L = []
L.append('END')
return L