[Python-ideas] Yield-from example: A parser

Greg Ewing greg.ewing at canterbury.ac.nz
Wed Feb 18 04:07:09 CET 2009

Antoine Pitrou wrote:

>    def parse_items(closing_tag = None):
>      elems = []
>      while 1:
>        token = token_stream.next()
>        if not token:
>          break # EOF
>        [etc.]
> It looks like parse_items pulls from token_stream until exhaustion.

Only the outermost call does that. The recursive calls
are made with a closing_tag value, and parse_items stops
as soon as it reaches that. Writing a for-loop would
give the erroneous impression that we were looping to
exhaustion, when most of the time we're not.

Also, even in the outer call, it stops when it gets a
token of None, which is half a loop sooner than the
scanner becomes exhausted. If a for-loop were used, it
would always be exited via a break.

Thirdly, if I had used a for-loop there, I would have
to have turned it into a while loop for the push version,
and that would have obscured the symmetry between the
two versions.


More information about the Python-ideas mailing list