Python: 函数传参、默认参数
python函数是值传递还是引用传递
答案: 都不是, 应该是传对象或对象的引用
函数参数在传递的过程中将整个对象传入,对可变对象的修改在函数外部以及内部都可以见,调用者和被调用者之间共享这个对象,而对于不可变对象,
并不能真正被修改,因此,修改往往是通过生成一个新对象然后赋值来实现的.
def change_me(org_list):
print(id(org_list))
new_list = org_list
print(id(new_list))
if len(new_list) > 5:
new_list = ['a', 'b', 'c']
for i,e in enumerate(new_list):
if isinstance(e, list):
new_list[i] = "***"
print(new_list)
print(id(new_list))
分别找两个list作为参数尝试一下
警惕函数默认参数潜在的问题
默认参数可以给函数的使用带来很大的灵活性,当函数没有指定形参对应的实参就会自动使用默认参数.
def append_test(new_item, lista = []):
print(id(lista))
lista.append(new_item)
print(id(lista))
return lista
连续调用两次append_test(1)
, append_test("a")
函数返回值会怎样呢?
期望是 [1]、['a']
实际: [1], [1, 'a']
如果不想让默认参数所指向的对象在所有的函数调用中被共享,而是函数调用过程中动态生成,可以在定义的时候设置为None对象作为占位符
本文来自博客园,作者:码上的生活,转载请注明原文链接:https://www.cnblogs.com/zyl007/p/16886988.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异