1条回答 默认 最新
- 微笑的菜鸟 2021-09-21 00:08关注
可以这样自己添加打印信息看看,这里把变量的物理地址打印出来会比较清晰
概括就是参数如果是可变类型如题中的数组,当该参数在调用时没有被赋值,运行时变量指向默认参数会直接影响后面调用的默认值搭配代码注释和运行截图更好理解
下面是代码加注释,希望帮助你理解了这个问题,我也是用尽了洪荒之力
def func(x=[], y=[6,7]): print("x 的地址", id(x), end=";") print("y 的地址", id(y)) x.append(8) y.append(8) return x+y a, b = [1,2], [3,4] print("a的地址", id(a), "b的地址", id(b)) # x传了,调用方法时,方法内的变量 x 指向 a 变量,默认参数x 不受影响,调用完之后默认参数 x=[] # y没传,调用方法时,方法内的变量 y 指向默认参数y, 默认参数 y 执行了 append 操作,调用完之后 y=[6,7,8] print("调用时只把 a 赋值给 x", end=">>") t = func(x=a) # x没传,调用方法时,方法内的变量 x 默认参数x,默认参数 x 执行了 append 操作,调用完之后默认参数 x=[8] # y传了,调用方法时,方法内的变量 y 指向 b 变量, 默认参数 y 不受影响,调用完之后还是上一轮的值 y=[6,7,8] print("调用时只把 b 赋值给 y", end=">>") t = func(y=b) # x没传,调用方法时,方法内的变量 x 默认参数x,默认参数 x 执行了 append 操作,调用完之后默认参数 x=[8,8] # y没传,调用方法时,方法内的变量 y 指向默认参数y, 默认参数 y 执行了 append 操作,调用完之后 y=[6,7,8,8] # 所以拼接起来就是最终结果x+y=[8, 8, 6, 7, 8, 8] print("调用时不传参") print(func(), end=';') print()
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决评论 打赏 举报无用 2
悬赏问题
- ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
- ¥20 关于URL获取的参数,无法执行二选一查询
- ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
- ¥15 marlin编译错误,如何解决?
- ¥15 有偿四位数,节约算法和扫描算法
- ¥15 VUE项目怎么运行,系统打不开
- ¥50 pointpillars等目标检测算法怎么融合注意力机制
- ¥20 Vs code Mac系统 PHP Debug调试环境配置
- ¥60 大一项目课,微信小程序
- ¥15 求视频摘要youtube和ovp数据集