在python中重置递归函数中的范围变量

时间:2016-03-05 14:31:11

标签: python django recursion

我有树状数据模型(id - parent)。我有递归方法,让所有孩子都获得当前页面。

children = []    
class Page(models.Model):
    ...
    def get_children(self, include_self=True):
        global children
        if include_self:
            children.append(self.id)
        for c in Page.objects.filter(parent=self.id):
            c.get_children(True)
        return children

我使用控制台进行测试:

>>> from pages.models import Page
>>> q = Page.objects.get(id=10) #I get a page with children.
>>> q.get_children(False)

工作正常:

[12L, 11L]

但是,如果我下次使用这种方法,

q.get_children(False)

结果将是:

[12L, 11L, 12L, 11L]

我想永远拥有:

 [12L, 11L]

做错了什么?我应该如何重置变量但安全的递归范围?

修改

正确的递归函数是:

def get_children(self, include_self=True, children = None):
   if children is None:
        children = []
    if include_self:
        children.append(self.id)
    for c in Page.objects.filter(parent=self.id):
        c.get_children(True)
    return children

0 个答案:

没有答案