PEP: statements in control structures (Re: Conditional Expressions don't solve the problem)

Andrew Dalke dalke at dalkescientific.com
Fri Oct 19 05:07:24 CEST 2001


Huaiyu Zhu:
>But then I was reminded of the examples I collected by searching for break
>statements in the source distribution.  Most usages are similar to
>
>./Demo/pdist/makechangelog.py:

(final version)
>    while file = getnextfile(f); file:
>        revs = []
>        while rev = getnextrev(f, file); rev:
>            revs.append(rev)
>        allrevs += revs


And in that case (elsewhere in the thread) I showed that it
was better rewritten using an iterator/generator style.  The
most succinct version is

for file in getnextfile(f):
  allrevs.extend(getnextrev(f, file))

Where getnextfile and getnextrev need to be rewritten
as generators.

That's because everything of the proposed form

  while x = f(a); x:

can be written as

  for x in generator_f(x):

and the creation of a generator is, in 2.2, as simple as

  iter(f, None)

or, if f takes parameters, through the use of yield.

I love generators and iterators.  :)

                    Andrew
                    dalke at dalkescientific.com






More information about the Python-list mailing list