我有一个分层组织,它是一棵树,如果父母赞助孩子,节点就是孩子。看来我可以用这段代码遍历树
def get_team(self, person, team):
firstline = User.query(User.sponsor == person.key).fetch(99999999)
if firstline:
for person in firstline:
team.append(person)
newdownline = self.downline(person, team)
return team
使用上面我可以得到一个用户的组织只是
downline=user.get_team(user, [])
但是有没有更有效的方法,因为我必须为单个请求多次执行此操作,并且很多递归可能效率低下?或者代码会很好,因为它可以正确地遍历树?在我的第一个版本中,我使用了三个变量,我发现我可以将代码重新排列为只有两个变量,而不是这样:
def downline(self, person, team, teamlist):
firstline = User.query(User.sponsor == person.key).fetch(99999999)
if firstline:
for person in firstline:
teamlist.append(person)
newdownline = self.downline(person, team, teamlist)
team.append(newdownline)
return teamlist
我发现 teamlist 变量并不是真正需要的,所以我删除了它。我这样做的方式是首先使用一个变量太多:
people = user.downline(user, [], [])