Генераторы Python: правильный код, рекурсивно повторяющий дерево

class Node(object):
    def __init__(self, lst):
        if type(lst) == list:
            self.value = lst[0]
            self.children = lst[1:]
        else:
            self.value = lst
            self.children = []
    @property
    def ChildElements(self):
        return [Node(a) for a in self.children]

    @property
    def GetValue(self):
        return self.value

def node_recurse_generator(node):
    yield node.value
    for n in node.ChildElements:
        node_recurse_generator(n)

Узел представляет собой простую древовидную структуру данных. Первым элементом списка всегда является значение узла, остальные элементы будут дочерними. Если узел инициируется чем-то другим, кроме списка, это значение будет таким, а дочерние элементы будут [], пустой список.

a = Node([1,[10,20,30],[100,200,300]])
>>> list(node_recurse_generator(a))
[1]

Было бы здорово иметь рекурсивный итератор по всем элементам, но мой генератор выдает только первый элемент. Почему это происходит?

8
задан George 3 October 2011 в 11:24
поделиться