以下是三个蟒代码:如何解释这三个python代码的执行结果?
======= 1号=======
def foo(x, items=[]):
items.append(x)
return items
foo(1) #return [1]
foo(2) #return [1,2]
foo(3) #return [1,2,3]
====== 2号===== ===
def foo(x, items=None):
if items is None:
items = []
items.append(x)
return items
foo(1) #return [1]
foo(2) #return [2]
foo(3) #return [3]
======第3号=======
def foo(x, items=[]):
items.append(x)
return items
foo(1) # returns [1]
foo(2,[]) # returns [2]
foo(3) # returns [1,3]
对于代码1号,由于没有设置的items
值,我THI nk应该始终采用默认值[]。但参数items
的行为类似于一个静态变量,为后续使用保留其值。 No.2的代码按照我的预期执行:每次调用foo时,items
取默认值None
。至于代码3,我完全不知道。为什么上述三段代码执行得如此不同?你可以解释吗?谢谢。
PS:我使用蟒3.3.1
有无。 1,如果foo只是在没有赋值的情况下被调用,它是这样行事的吗? – Jiminion
在阅读了Python中的“最小惊讶”之后:“可变的默认参数”和相关链接http://effbot.org/zone/default-values.htm,我想我找到了答案。不幸的是,我认为我发现的答案与“最小惊讶”线程和effbot.org网页中的答案不同,以及这个问题中的答案。所以我计划发布自己的答案。但似乎我不允许这样做,也许是因为有些人认为这是一个重复的帖子。 (继续......) – user2384994
我同意这个问题有点重复,但答案决不是重复。因此,我不会接受任何答案,并决定在这里发表我的回答,作为评论,也发表在“最小惊讶”的帖子中。 – user2384994