Python/Django递归函数刷新时加倍结果
这真的很奇怪-我有11个标签被传递到Python/Django递归函数刷新时加倍结果,python,django,recursion,Python,Django,Recursion,这真的很奇怪-我有11个标签被传递到LabelTree。第一次调用sort\u by\u hierarchy,一切正常 我刷新页面,一个AJAX调用被触发来调用这个函数,然后它返回22个标签。我再次刷新页面,44个标签 我做错了什么 class LabelTree: def __init__(self, labels): self.by_parent = {} self.by_id = {} for label in labels:
LabelTree
。第一次调用sort\u by\u 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
问题在于:
def sort_by_hierarchy(self, parent_id=0, depth=0, hierarchical_labels=[]):
切勿使用默认值创建参数,如[]
或{}
,因为列表或dict将只创建一次,并且方法的下一次调用将使用列表的修改版本(其中包含以前的标签)作为分层标签的默认值
改用这个成语:
def sort_by_hierarchy(self, parent_id=0, depth=0, hierarchical_labels=None):
if hierarchical_labels is None:
hierarchical_labels = []
另外,请参见或以获取解释。