看到了有给 Python 函数参数的默认值传递可变对象,以此来加快斐波那契函数的递归速度,代码如下:
def fib(n, cache={0: 0, 1: 1}):
if n not in cache...,Python 函数也是对象,参数的默认值就是对象的属性,在编译阶段参数的默认值就已经绑定到该函数,如果是可变对象,Python 函数参数的默认值在会被存储,并被所有的调用者共享,也就是说,一个函数的参数默认值如果是一个可变对象...正确的结果是:
[0, 1]
[1, 2, 0, 1, 2]
[0, 1, 0, 1]
你可能会觉得,最后一个 func(2) 怎么是这样,不急,我们 print(id(li)) 调试一下:
def...,说明它们用到的是 li 是同一个,这就参数的默认值是可变对象的逻辑,对于所有的调用者来讲,是共享的。...最好的方式是不要使用可变对象作为函数默认值。