这真的很奇怪-我有11个标签被传递到LabelTree
。我第一次打电话给sort_by_hierarchy
,一切都很好
我刷新页面,一个AJAX调用被触发来调用这个函数,然后它返回22个标签。我再次刷新页面,44个标签
我做错什么了
class LabelTree:
def __init__(self, labels):
self.by_parent = {}
self.by_id = {}
for label in labels:
parent_id = 0 if label.parent_id is None else label.parent_id
if parent_id not in self.by_parent:
self.by_parent[parent_id] = []
self.by_parent[parent_id].append(label)
self.by_id[label.id] = label
def sort_by_hierarchy(self, parent_id=0, depth=0, hierarchical_labels=[]):
if parent_id not in self.by_parent:
return hierarchical_labels
labels = self.by_parent[parent_id]
for label in labels:
label.depth = depth
hierarchical_labels.append(label)
hierarchical_labels = self.sort_by_hierarchy(label.id, depth+4, hierarchical_labels)
return hierarchical_labels
问题在于:
千万不要创建带有
[]
或{}
等默认值的参数,因为列表或dict只会创建一次,并且下一次调用方法时会将列表的修改版本(其中包含以前的标签)作为hierarchical_labels
的默认值。改用这个成语:
相关问题 更多 >
编程相关推荐