Python 列表作为默认参数的陷阱

如果将一个列表作为默认参数传递给函数,在函数内部对列表操作后会怎样呢?我们看下面的代码:

def func(L=[]):
    L.append(1)
    return L

print func()
print func()
print func()

函数func()接受一个参数,这个参数的默认值是个空列表,在函数体里这个空列表被追加一个元素1,函数最后返回这个列表。当3个完全相同的函数被执行3次后,返回值会是怎么样?结果是

[1]
[1, 1]
[1, 1, 1]

这是因为函数的默认参数只运算一次,如果这个默认参数是可变的,那么这个参数的变化就会在函数每次被调用时积累下来。
作为对比,如果代码改为:

def func():
    L=[]
    L.append(1)
    return L

print func()
print func()
print func()

结果就变成

[1]
[1]
[1]

原文链接:http://www.lfhacks.com/tech/python-list-parameter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值