由默认参数list引起的疑惑——python
一个函数:
def add_end(l=[]):
l.append('END')
return l
调用add_end([1,2,3])时显示[1, 2, 3, 'END']
正确
但是调用add_end()时,第一次正确,['END']
第二次就显示['END','END'],第三次显示['END','END','END']
疑惑:
默认参数是[]
,但是函数似乎每次都“记住了”上次添加了'END'
后的list。
这里是,list一个变量,第一次调用的时候,已经初次化好了,每次调用函数,改变了l的内容,都会使list改变,不再是函数定义的[]了,也就是只初始化一次
所以默认参数必须执行不可变的数据类型,这样才会使变量不改变,如元组tuple和字符串
而上面的函数也可以改变为这样:
def add_end(L=None):
if L is None:
L = []
L.append('END')
return L
也就是不成为默认参数,在下面才生成list