[英]python recursion not working with yield
我創建了一個樹數據結構和一個給出所有葉子的函數,但遞歸算法似乎永遠不適用於任何子節點。 使用根節點調用該函數一次
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
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
在“recent”python版本中可用。 舊版本的替代方案是循環:
for item in child.get_files(name):
yield item
(類似的問題在函數中發生了很多: 為什么我的函數返回None? )
不是解決方案,而是一個觀察:我猜你在pastebin代碼中打印一些內容,然后你修剪了print語句只是為了在問題上發布一個mve。 沒有print語句它完全正常,但只要在方法中放入一個print語句,遞歸就會停止發生。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.