开发者

Bug or misunderstanding in Python 2.7? [duplicate]

开发者 https://www.devze.com 2023-03-04 12:34 出处:网络
T开发者_C百科his question already has answers here: Closed 11 years ago. Possible Duplicate: “Least Astonishment” in Python: The Mutable Default Argument
T开发者_C百科his question already has answers here: Closed 11 years ago.

Possible Duplicate:

“Least Astonishment” in Python: The Mutable Default Argument

Am I missing something here or is this really a bug? Below is a recursive function that generates a multi-dimensional list from a tuple specification, for example.

dim((2,3))  
returns  
[[[],[],[]],[[],[],[]]]

The only problem is that it adds to the list each time I call it, if I call it without the default parameter, if I specify the default parameter like dim((2,3),[]), then it's fine. It's saving the state of the default parameter each call! If no one can find a problem with what I'm doing I'll enter it in the 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 dim(t, c = [])

It's a bug (in your code). That c = [] part is only evaluated once during the entire program. When you call dim, c is being continuously appended to. A better approach would be this:

def dim(t, c=None):
    if c is None:
        c = []
    ...
0

精彩评论

暂无评论...
验证码 换一张
取 消