__iter__ yield

Diez B. Roggisch deets at nospam.web.de
Sun Mar 9 18:00:08 EDT 2008


duccio schrieb:
> 
> Hello!
> Someone knows if it's possible to make this __iter__ function with just 
> one 'yield' intead of two?
> Is there some simpler way to make this  __iter__ iter through all nodes?
> Thanks!
> 
> class Node:
>     def __init__(self, data=None):
>         self.childs=[]
>         self.data=data
>     def appendNode(self, n):
>         node=Node(n)
>         self.childs.append(node)
>         return node
>     def __str__(self):
>         return '<'+str(self.data)+'>'
>     def __iter__(self):
>         yield self #1
>         for n in self.childs:
>             for nn in n.__iter__():
>                 yield nn #2

Nope. There have been numerous discussions about this, introducing 
something like a yield_all-keyword or such thing that would replace the 
above boilerplate - but so far they all have been rejected. Search the 
archives for the reasons, I don't remember them :)

Diez



More information about the Python-list mailing list