Python Default argument is mutable

Python Default argument is mutable

引言

不知道小伙伴们有没有遇到过一个问题,就是 Python 编译器提示我们默认参数是可变的情况,这里我们来对这个问题进行一下说明。

正文

先来看一段代码:

def append(number, number_list=[]):
    number_list.append(number)
    print(number_list)
    return number_list


# Below are 3 calls to the `append` function and their expected and actual outputs:
append(5)  # expecting: [5], actual: [5]
append(7)  # expecting: [7], actual: [5, 7]
append(2)  # expecting: [2], actual: [5, 7, 2]
"""
result:
[5]
[5, 7]
[5, 7, 2]
"""

结果很夸张,我们每一次调用,都会累计上次掉用后的结果,很明显会留一个 bug 的隐患给我们。

那么如何解决这个问题呢?只需要将代码改为如下形式即可。

def append(number, number_list=None):
    if number_list is None:
        number_list = []
    number_list.append(number)
    print(number_list)
    return number_list


# Below are 3 calls to the `append` function and their expected and actual outputs:
append(5)  # expecting: [5], actual: [5]
append(7)  # expecting: [7], actual: [5, 7]
append(2)  # expecting: [2], actual: [5, 7, 2]
"""
result:
[5]
[7]
[2]
"""

如果大家觉得有用,就请点个赞吧~

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勤奋的大熊猫

你的鼓励将是我写作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值