我制作了一个树数据结构和一个可以释放所有叶子的函数,但是递归算法似乎从未对任何子节点起作用。使用根节点调用该函数一次
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)
答案 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语句,递归就会停止。