(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']
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现