Python参数的默认值进阶250216
- 如果函数参数的默认值是可变类型,就需要注意指向问题
def func(a1, a2 = [1, 2]):
a2.append(666)
print(a1, a2)
return
func(100)# 100 [1, 2, 666]
func(200)# 200 [1, 2, 666, 666]
func(99, [77, 88])
func(300)# 300 [1, 2, 666, 666, 666]
- 编译到到函数时,会提前为默认值安排了内存
- 第6行函数调用中,
a2
会指向已经分配的内存中的列表地址- 函数调用的第2行,会为这个地址中的列表添加元素666
- 这样在第7行再调用函数时,
a2
的值已经变成[1, 2, 666]
- 不同次调用函数时,默认值不会生成新的,而是会在编译过程中已经生成好的
- 第8行,就不再使用默认值