__iter__ yield

George Sakkis george.sakkis at gmail.com
Sun Mar 9 23:12:58 EDT 2008


On Mar 9, 7:37 pm, Paul Hankin <paul.han... at gmail.com> wrote:
> On Mar 9, 8:58 pm, duccio <d... at tiscali.it> wrote:
>
> > Someone knows if it's possible to make this __iter__ function with just
> > one 'yield' intead of two?
> > ...
> >      def __iter__(self):
> >          yield self #1
> >          for n in self.childs:
> >              for nn in n.__iter__():
> >                  yield nn #2
>
> Only one yield and shorter (but not really any simpler):
>
> from itertools import chain
>
> class Node:
>     ...
>     def __iter__(self):
>         for x in chain([self], *self.childs):
>             yield x

Actually this doesn't need a yield at all:

class Node:
    ...
    def __iter__(self):
        return chain([self], *self.childs)

George



More information about the Python-list mailing list