>>> def foo(bar=[]):
... bar.append("apple")
... return bar
>>> foo()
["apple"]
>>> foo()
["apple", "apple"]
>>> foo()
["apple", "apple", "apple"]
为什么要添加" apple"而不是制作新的清单?
答案 0 :(得分:0)
答案是函数参数的值仅在定义时计算一次。因此,仅在首次定义foo()时,才将参数初始化为其默认值。然后它调用foo(),它将继续使用最初初始化条的相同列表。
解决方法如下:
>>> def foo(bar=None):
... if bar is None: # or if not bar:
... bar = []
... bar.append("baz")
... return bar
...
>>> foo()
["baz"]
>>> foo()
["baz"]
>>> foo()
["baz"]