day12 Python 函数形参默认值的坑

函数形参默认值容易产生的误区

  注意:函数在加载时候,会创建默认值,如果这个默认值是一个可变对象,那么要注意以下坑。

def func(val, list=[]):  # 函数在加载的时候会创建list的默认列表,其他调用这个函数的时候,如果没有传递新的list,那么会共用同一个list。
    print(id(list))
    list.append(val)
    return list

# 此处list1和list3在调用函数的时候,发现函数体内部的默认list的内存地址相同,所以最后print(list1)的时候,里面有两个值
list1 = func(10)
list2 = func(123, []) # 此处传递给函数func了一个实参[],此时发现函数体内部的list的内存地址发生了变化。
list3 = func('a')
print('list1=%s' % list1)  # [10,"a"] 
print('list2=%s' % list2)  # [123]
print('list3=%s' % list3)  # [10,"a"]
原文地址:https://www.cnblogs.com/fanghongbo/p/9892085.html