[英]Python generator with recursive call
我試圖使用預先深度優先搜索的生成器在樹中生成節點。 父節點可以具有任意數量的子節點,子節點存儲在列表中。
我認為這個代碼可以工作,但似乎for循環遍歷每個子進程而不實際進入遞歸調用。
def traverse_tree(t):
yield t.label, t.val
for child in t.children:
traverse_tree(child)
有誰知道如何處理這個?
如果查看函數,對於每次調用, yield
表達式只會被命中一次。 所以你的發電機只會產生一件事。 為了讓它產生不止一件事,你需要從孩子們那里得到:
def traverse_tree(t):
yield t.label, t.val
for child in t.children:
yield from traverse_tree(child)
這是python 3.3+語法(IIRC)。 對於早期版本:
def traverse_tree(t):
yield t.label, t.val
for child in t.children:
for label, val in traverse_tree(child):
yield label, val
看看這個答案使用yield進行遞歸 ,更具體地說是這里的構造yield from
: https : //docs.python.org/3/whatsnew/3.3.html#pep-380 。
當您調用包含yield
的函數時,函數體中的代碼不會運行。 相反,它返回一個生成器對象。
您可以使用列表來存儲結果:
def traverse_tree(t, list):
list.append((t.label, t.val))
for child in t.children:
traverse_tree(child, list)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.