У меня есть иерархическая организация, которая представляет собой дерево, в котором узел является дочерним, если родитель спонсирует дочернего.Кажется, я могу пройти по дереву с помощью этого кода
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, [], [])