函数默认参数的坑
def extendList(val,list=[]):
list.append(val)
return list
list1 = extendList(10)
list2 = extendList(123,[])
list3 = extendList('a')
print('list1=%s'%list1)
print('list2=%s'%list2)
print('list3=%s'%list3)
#结果
list1=[10,'a']
list2=[123]
list3=[10,'a']
#默认参数定义的是可变数据类型时有坑。
#默认参数定义成可变数据类型后,如果调用函数时使用的是默认参数,那么使用的都是同一个内存空间,如果在某一次调用中进行了修改的话,那么以后再次调用此默认参数时参数已经被改变了。
#如果调用的时候传入了参数,那么就开辟新的内存空间,做的更改也是在新的空间中更改的,和默认参数的内存空间没有关系。
#默认参数一定要是不可变参数
def extendList(val,list=[]):
list.append(val)
return list
print('list1=%s'% extendList(10))
print('list2=%s'% extendList(123,[]))
print('list3=%s'% extendList('a'))
#结果
list1=[10]
list2=[123]
list3=[10,'a']
#和上面的是同种类型的,只不过上一种是全部执行完后才打印,这种情况是执行一次打印一次
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下