[Python-Dev] PEP 3142: Add a "while" clause to generator expressions

Terry Reedy tjreedy at udel.edu
Wed Jan 21 05:10:24 CET 2009


Steven D'Aprano wrote:

> Another argument against the PEP was that it breaks the correspondence 
> between the generator expression and the equivalent for-loop. I had 
> never even noticed such correspondence before, because to my eyes the 
> most important term is the yielded expression,  not the scaffolding
> around it.

This was a major reason to add comprehensions.

Your not noticing a primary design principle is hardly a reason to 
abandon it.  Indeed, I claim that your ignorance shows its validity ;-).

 > In a generator expression, we have:
> 
> yielded-expr for-clause if-clause
> 
> while the corresponding nested statements are:
> 
> for-clause if-clause yielded-expr
> 
> The three clauses are neither in the same order, nor are they in reverse 
> order.

They are in the same order but rotated, with the last brought around to 
the front to emphasize it.  Did you really not notice that either?

 >I don't know how important that correspondence is to language
> implementers, but as a Python programmer, I'd gladly give up that 
> correspondence (which I don't find that great) in order to simplify 
> exiting a generator expression early.
> 
> So I like the proposed change. I find it elegant and very Pythonic. +1 
> for me.

Ironically, in a thread cross-posted on c.l.p and elsewhere, someone 
just labeled Python's comprehension syntax as "ad hoc syntax soup". 
That currently is completely wrong.  It is a carefully designed 1 to 1 
transformation between multiple nested statements and a single 
expression.  But this proposal ignores and breaks that.  Using 'while x' 
to mean 'if x: break' *is*, to me, 'ad hoc'.

So I detest the proposed change.  I find it ugly and anti-Pythonic.

Terry Jan Reedy



More information about the Python-Dev mailing list