[Python-Dev] generator comprehension syntax, was: accumulator display syntax

Phillip J. Eby pje at telecommunity.com
Fri Oct 17 23:28:39 EDT 2003


At 09:10 PM 10/17/03 -0400, Raymond Hettinger wrote:
>[GvR]
> > I'd just like to pipe into this discussion saying that while Peter
> > Norvig's pre-PEP is neat, I'd reject it if it were a PEP; the main
> > reason that the proposed notation doesn't return a list.  I agree that
> > having generator comprehensions would be a more general solution.  I
> > don't have a proposal for generator comprehension syntax though, and
> > [yield ...] has the same problem.
>
>Is Phil's syntax acceptable to everyone?
>
>      (yield:  x*x for x in roots)

Ironically, I'm opposed.  :)

* Yield is a control flow statement, this is an expression

* yield: looks like lambda, and this is not a function

* Yield only makes sense if you come into this thinking about generators

* Yield distracts from the purpose of the expression

To put it another way, Python is "executable pseudocode".  Listcomps are 
pseudocode.  Yield in a generator is pseudocode.  (x*x for x in roots) is 
pseudocode.  But (yield: x*x for x in roots) looks like some kind of weird 
programming language gibberish.  :)

I think the worst misinterpretation I could have about the yield-less 
syntax is that I might think it was a "tuple comprehension" or something 
that returned a sequence instead of an iterator.  However, I'll find out 
it's not a sequence or tuple if I try to do anything with it that requires 
a sequence or tuple.  My worst case problem is re-execution of the iterator.

Which, by the way, brings up a question: should iterator comps be 
reiterable?  I don't see any reason right now why they shouldn't be, and 
can think of situations where reiterability would be useful.




More information about the Python-Dev mailing list