python 当函数的形参默认值为可变对象时

强调一点,函数形参的默认值只计算一次,发生在函数定义域定义的时候。

例如:

i = 5
def f(arg=i):
    print arg

i = 6
f()

以上代码将打印5而不是6.

 

再看一个比较明显的例子,当默认参数为可变的对象如列表、字典或大部分类的实例时:

def f(a, L=[]):
    L.append(a)
    return L

print f(1)
print f(2)
print f(3)

将输出以下结果:

[1]
[1, 2]
[1, 2, 3]

这是因为定义函数的时候,变量L指向了一片内存地址,在后面的反复调用过程中L始终指向同一片内存地址,append的操作都在对同一个列表进行操作。如果这不是你想要的结果,可以试试下面这种写法:

def f(a, L=None):
    if L is None:
        L = []
    L.append(a)
    return L

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值