2016-12-26 4 views
-1

私はPythonジェネレータを初めて使用しています。ここでは、ツリーのポストオーダートラバーサルを行いたいと考えています。私は他人のコードを次のように見つけました。私はそれをよく理解していない、代わりに単に後者として書きたいと思った。なぜ誰が私が間違っていたのか教えてくれませんか?Pythonジェネレータがツリーを横切る

def _loopallchildren(parent): 
    for child in parent.children: 
     if child.children: 
      for subchild in _loopallchildren(child): 
       yield subchild 
     yield child 

間違っコード:

def _loopallchildren(parent): 
    for child in parent.children: 
     if child.children: 
      _loopallchildren(child) 
     yield child 

答えて

3

単にそれは何もしないで何もせずに外から_loopallchildren(root)を呼び出す同じ理由。あなたはそれを利用するためにジェネレータを反復処理する必要があります。

Python≥3.3では、yield from _loopallchildren(child)を使用できます。

+0

これは意味があります。どうもありがとうございます。 – daydayup

関連する問題