为什么Python 3函数的默认值在多次调用时被覆盖?
有人能告诉我为什么,当我多次调用这个函数时,L 默认情况下从来不会被设置为空吗?而是后续调用的结果会把 L 的内容加到之前所有调用的结果后面?
这个函数把数据分成每7天一组,从最后一个日期开始([::-1]),计算每7天的平均值,并把结果作为一个值添加到一个列表中。它会忽略不完整的组。
数据的默认值是一个按顺序排列的日期列表。
def separate(data = [i for i in w][::-1],L = []):
print("separate has been called, data is %s and L is %s" % (data, L))
if len(data)<7:
return L
total = 0
dates = 0
for value in data[:7]:
if w[value] != "None":
total += float(w[value])
dates += 1
L.append(total / dates)
return separate(data[7:], L)
1 个回答
2
摘自官方文档:
默认值只会被计算一次。这在默认值是可变对象时,比如列表、字典或者大多数类的实例,就会产生影响。
[...]
如果你不想让默认值在后续调用中被共享,可以这样写函数:
def f(a, L=None): if L is None: L = [] L.append(a) return L