Python 2.7中的错误或误解?

Python 2.7中的错误或误解?,python,Python,可能重复: 我是遗漏了什么还是这真的是一个错误?例如,下面是一个递归函数,它从元组规范生成多维列表 dim((2,3)) returns [[[],[],[]],[[],[],[]]] 唯一的问题是每次调用它时它都会添加到列表中,如果我调用它时没有默认参数,如果我指定默认参数如dim2,3,[],那么就可以了。每次调用都会保存默认参数的状态!如果没有人能找到我正在做的事情的问题,我会在python bug reporter中输入它 cdr = lambda l : l[1:] car

可能重复:

我是遗漏了什么还是这真的是一个错误?例如,下面是一个递归函数,它从元组规范生成多维列表

dim((2,3))  
returns  
[[[],[],[]],[[],[],[]]]
唯一的问题是每次调用它时它都会添加到列表中,如果我调用它时没有默认参数,如果我指定默认参数如dim2,3,[],那么就可以了。每次调用都会保存默认参数的状态!如果没有人能找到我正在做的事情的问题,我会在python bug reporter中输入它

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])
def dimt,c=[]

这是代码中的一个bug。该c=[]部分在整个程序中只计算一次。当您调用dim时,c会不断追加到。更好的方法是:

def dim(t, c=None):
    if c is None:
        c = []
    ...
确切地但是为了挑剔,在与最显著的单例进行比较时,是首选的,当然,无-即s/if c==None/if c is None/。