python递归不适用于yield

时间:2018-08-08 19:56:11

标签: python generator

我制作了一个树数据结构和一个可以释放所有叶子的函数,但是递归算法似乎从未对任何子节点起作用。使用根节点调用该函数一次

def get_files(self, initials):
    for child in self.children:
        name = initials + os.sep + child.name
        if child.children == []:
            yield name
        else:
            child.get_files(name)

全班:https://pastebin.com/4eukaVWx

2 个答案:

答案 0 :(得分:3)

    if child.children == []:
        yield name
    else:
        child.get_files(name)

这里您只在if中屈服。在另一个分支中,数据丢失。您需要产生child.get_files(name)返回的元素。我会做的:

    if not child.children:
        yield name
    else:
        yield from child.get_files(name)

yield from在“最新”的python版本中可用。较旧版本的替代方法是循环:

for item in child.get_files(name):
   yield item

功能Why does my function return None?经常发生类似的问题)

答案 1 :(得分:0)

不是解决方案,而是观察: 我猜您正在在pastebin代码中打印某些内容,并且修剪了打印语句只是为了对问题发表意见。在没有print语句的情况下,它完全可以正常工作,但是一旦在该方法中放置了一个print语句,递归就会停止。