#函数参数的默认值只会执行一次
def f(a, L=[]):
L.append(a)
return L
print(f(1))
print(f(2))
print(f(3))
对于这个函数而言,在调用的时候没有传递第二个参数,则由于函数参数的默认值只会执行一次,即初始化L = []一次,
L被赋予了列表对象的一个内存空间,地址不可变,由于列表可变的特性,每次调用只会在原来的列表上追加,并不会创建
新的列表。
输出结果:
[1]
[1, 2]
[1, 2, 3]
def _f(a, L = None):
if L is None:
L = []
L.append(a)
return L
print(_f(1))
print(_f(2))
print(_f(3))
对于这个函数来说,参数初始化的时候,默认值只会执行一次,可以假设L指向内存的0号空间,不管后面怎么改变赋值,
接下来再调用这个函数的时候L都会指向0号空间。
输出结果:
[1]
[2]
[3]