为什么每次都没有新的清单呢?

时间:2016-07-11 05:32:34

标签: python

>>> def foo(bar=[]):        
...    bar.append("apple")    
...    return bar

>>> foo()
["apple"]
>>> foo()
["apple", "apple"]
>>> foo()
["apple", "apple", "apple"]

为什么要添加" apple"而不是制作新的清单?

1 个答案:

答案 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"]

Credit goes to www.toptal.com