以下是三个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
没有提供 的值,我认为它应该始终采用默认值 []。但是该参数的items
行为类似于静态变量,保留其值以供后续使用。No.2 的代码按我的预期执行:每次调用 foo 时,items
取默认值None
。至于代码 3,我完全不知道。为什么上面三段代码的执行方式如此不同?你可以解释吗?谢谢你。
PS:我正在使用 python 3.3.1