python的函数参数的默认值只计算一次,一个经典的例子是:
def f(a, L=[]):
L.append(a)
return L
print(f(1))
print(f(2))
print(f(3))
输出结果:
[1]
[1, 2]
[1, 2, 3]
只需要改成这样就能避免上述bug:
def f(a, L=None):
if L is None:
L = []
L.append(a)
return L
这两者有什么不同吗?为什么后者可以避免函数参数默认值只计算一次所带来的bug?还是说只要记住这样用就行了?
我的理解是list作为python的指针,第一个例子是函数每次调用都会检查内存中是否已经存在L,若存在则不会调用default的值,第二个例子L=None相当于一个默认的变量,它不一定是指针,如果再调用且不设置第二个参数的话那一定是按default来的。不一定对哈,仅供参考!