[python] 默认参数的可变对象

默认参数的可变对象指的是在函数定义中使用可变对象(如列表、字典等)作为默认参数值。这可能会导致意外的行为。

  • 因为默认参数只在函数定义时进行一次初始化,而不是每次函数调用时。

下面是一个简单的例子来描述这个问题:

def append_to_list(value, my_list=[]):
    my_list.append(value)
    return my_list

result1 = append_to_list(1)
print(result1)  # 输出 [1]

result2 = append_to_list(2)
print(result2)  # 输出 [1, 2]

在上面的例子中,我们定义了一个带有默认参数值的函数append_to_list,并在函数体内修改了默认参数my_list。当我们第一次调用append_to_list时,它按预期返回了[1];但是当我们第二次调用append_to_list时,它返回了[1, 2],而不是预期中的[2]

  • 这是因为默认参数my_list在函数定义时只初始化一次,而后续的调用共享了同一个默认列表对象。

为了避免这个问题,可以使用不可变对象(如None)作为默认参数值,并在函数体内创建一个新的可变对象来处理这种情况,比如:

def append_to_list(value, my_list=None):
    if my_list is None:
        my_list = []
    my_list.append(value)
    return my_list

这样就能确保每次调用函数时都会得到一个新的空列表,避免了默认参数的可变对象带来的问题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值