Python默认值参数

示例1:可变对象作为默认值参数

def demo(newitem, old_list=[]):
    old_list.append(newitem)
    return old_list
print(demo('5', [1, 2, 3, 4]))
print(demo('aaa', ['a', 'b']))
print(demo('a'))
print(demo('b'))

[1, 2, 3, 4, '5']
['a', 'b', 'aaa']
['a']
['a', 'b']

示例2:不可变对象作为默认值参数

def demo(newitem, old_list=None):
    if old_list == None:
        old_list = []
    old_list.append(newitem)
    return old_list
print(demo('5', [1, 2, 3, 4]))
print(demo('aaa', ['a', 'b']))
print(demo('a'))
print(demo('b'))

[1, 2, 3, 4, '5']
['a', 'b', 'aaa']
['a']
['b']

原因分析:

1.多次调用带有默认值参数的函数,参数默认值只会在第一次调用时进行初始化。因此如果参数默认值为变量,则默认参数就是函数初始化时变量所指的对象。
2.函数形参中默认值为容器类对象时,多次调用可能会发生累加效应,所以形参中一般不建议使用容器类对象做默认值,建议使用None做默认值。
3.基于此,我们应该避免使用可变对象作为参数默认值,这是因为假如使用可变对象作为参数默认值,且没有进行显性传参,那么该对象会被多次默认调用的函数参数共享,如果函数内部又存在原地修改对象的操作,便会影响到其他调用的函数,导致不同调用的内部默认参数不再独立,会互相影响,从而容易出现严重的错误。

一句话总结:避免使用可变对象作为参数默认值(切记!切记!切记!)
可变对象:列表、字典、集合
不可变对象:元组、字符串、int、float、bool…

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值