Python 函数调用使用默认值参数 — 谈谈可变对象的坑?!【前置补充】

针对前一篇文档《Python 函数中使用默认值参数 — 谈谈可变对象的坑?!》再进行补充说明

在 python 中进行函数调用,其参数可以使用 “默认值参数” 类型,那么当为 “默认值” 参数传入一个 “对象” 的时候,有什么限制和要求么?

参数的默认值可以是:

  • 可变对象,如列表、字典、集合
  • 不可变对象,如整数、浮点数、字符串和元组

一. 参数默认值使用可变对象

1. 调用时不传实参

函数定义中,形参被赋予了一个默认值,且该默认值为一个可变对象(空白的列表)

  • id(): 该方法可以输出对象的唯一标识,用于区分是否为同一个对象
  • 连续调用该函数两次
  • 观察:函数内部对局部变量 lt 的处理
# 定义一个函数,其形参 lt 是一个 “可变对象(列表)”
def fun(lt=[]):
    print(f'函数内:lt = {lt},  指向对象:id(lt)={id(lt)}')

# 连续两次调用函数,且均不传参
fun()
fun()

# 输出为:对象id相同,证明二者为同一个对象
函数内:lt = [],  指向对象:id(lt)=2333811036544
函数内:lt = [],  指向对象:id(lt)=2333811036544

结合图形分析:

  • 第一次调用,在函数内部为局部变量(即形参) lt 创建了一个对象,编号为2333811036544
  • 第二次调用,由于不需要额外的处理活动,因此在函数内部复用了前面创建的 lt 对象,不再创建一个新的对象
    • 原因:
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值