有人可以解释一下为什么,当我多次调用此函数时,默认情况下L从未设置为空吗?但是,任何后续调用的结果都将L附加到先前调用的所有结果之后吗?
该函数将数据从最后一个日期([::-1]开始)分成7天的块,计算每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)
从文档中获取:
默认值仅计算一次。当默认值是可变对象(例如列表,字典或大多数类的实例)时,这会有所不同。
[...]
如果您不希望在后续调用之间共享默认值,则可以这样编写函数:
def f(a, L=None): if L is None: L = [] L.append(a) return L
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句