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对象作为占位符

posted @ 2022-11-13 21:12  码上的生活  阅读(104)  评论(0编辑  收藏  举报