由默认参数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
posted @ 2016-01-10 01:28  thouger  阅读(173)  评论(0编辑  收藏  举报