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