簡體   English   中英

python遞歸不適用於yield

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM