Python:通过引用和递归调用

时间:2014-10-22 11:26:56

标签: python recursion

我尝试解析XML文件。 主要目标是使用其他特定父标记获取特定标记。 我必须使用现有的文件,我必须修改它。

def get_item_with_parents(self, parent, name, items=None, parents=None):
    self.parents=parents

    if items == None:
        top_level = 1
        items = []
        self.parents = []
    else:
        top_level = 0

    for child in self.children:
        self._append_list(child.name)
        if child.name == name and parent in self.parents:
            print "inside if"
            self._del_list()
            items.append(child)
            #print self.parents
            child.get_item_with_parents(parent, name, items, self.parents)

    if top_level:
        return PacketList(items)


def _append_list(self, item):
    self.parents.append(item)


def _del_list(self):
    self.parents=[]
    print "test"
    print self.parents

代码应该执行以下操作(子变量基本上应该与父项相同):

我得到父标记是应该返回的标记的名称。 然后我检查我是否是第一次递归,否则我不会在最后返回数据包列表。

对于每个孩子,我尝试将其名称附加到我的自己的父母列表中。然后我检查我的数据包是否有正确的名称"如果是的话我会看看"父母"是自我。 所以现在出现了问题。

如果父母在列表中,我必须删除列表中的所有内容。但这不会奏效。

列表不会被清除。因此,如果标签的下一个出现名称为" name",即使它不应该再次附加,也会再次附加,因为父母不应该再次出现在列表中

有人可以告诉我为什么吗?

1 个答案:

答案 0 :(得分:0)

我发现了自己的错误。 要清除列表,我必须致电del parents[:]

parents=[]不起作用(接缝它什么都不做)。