(Python)每日代码||2024.1.17||函数中给列表形参默认值时,该默认列表在函数中的改变会保留下来

def f(x,li=[1]):
print(id(li))
li.append(x)
print(li)
f('a')#第一次调用函数
print()
f('b')#第二次调用函数
print()
f('a',[])#第三次调用函数
print()
f('b',[2,2])#第四次调用函数
print()
f('a')#第五次调用函数
'''输出
1435220040000
[1, 'a']
1435220040000
[1, 'a', 'b']
1435222867392
['a']
1435222867392
[2, 2, 'b']
1435220040000
[1, 'a', 'b', 'a']
'''

在调用函数时,若未传递列表参数,则会使用列表形参的默认值。

该默认值的地址是不变的,并且调用函数中对该地址的列表所做的改动会保留下来。

在调用函数结束时或下一次调用函数开始时,均不会将该地址所在的列表形参重置为定义函数时设定的默认值

  • 第一次调用函数后,列表形参li默认值从[1]变为了[1,'a']
  • 第二次调用函数仍未传递列表参数,列表形参li默认值从[1,'a']在函中被变为了[1,'a','b']
  • 第三次调用函数传递了一个空列表,函数没有使用默认的列表形参,因此列表形参li默认值没有变化,仍为[1,'a','b']
  • 第四次电影函数传递了一个列表[2,2]与上面情况一样
  • 第五次调用函数未传递列表,函数使用了默认的列表形参li,为[1,'a','b'],函数操作后默认的形参列表变为了[1,'a','b','a']
posted @   Kazuma_124  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示