由默认参数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

转载于:https://www.cnblogs.com/thouger/p/5117682.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值