可能重复:
“Least Astonishment” in Python: The Mutable Default Argument
我在这里遗漏了什么或这真的是一个错误吗?下面是一个递归函数,例如,从元组规范生成多维列表。
dim((2,3))
returns
[[[],[],[]],[[],[],[]]]
唯一的问题是,每当我调用它时它会添加到列表中,如果我调用它而没有默认参数,如果我指定默认参数如dim((2,3),[]),那么它很好。它会保存每个调用的默认参数的状态!如果没有人能找到我正在做的事情的问题,我会在python bug记者中输入。
cdr = lambda l : l[1:]
car = lambda l : l[0]
last = lambda x : x[-1:][0]
def dim(t, c = []):
if len(t) > 0:
i = car(t)
for j in range(i):
c.append([])
dim(cdr(t), last(c))
return c
print dim([2,3])
print dim([2,3])
print dim([2,3])
print dim([2,3])
答案 0 :(得分:0)
def dim(t, c = [])
这是一个错误(在您的代码中)。 c = []
部分仅在整个计划期间评估一次。当您调用dim时,c
将被连续追加。更好的方法是:
def dim(t, c=None):
if c is None:
c = []
...