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

Nick Coghlan ncoghlan at gmail.com
Tue Jan 20 21:38:05 CET 2009


Antoine Pitrou wrote:
> Alexey G. Shpagin <python-3000 <at> udmvt.ru> writes:
>> Example will look like
>>  g = (n for n in range(100) if n*n < 50 or else_break())
> 
> Please don't suggest any hack involving raising StopIteration as part of a
> conditional statement in a generator expression. It might work today, but it
> might as well break tomorrow as it's only a side-effect of the implementation,
> not an official property of the language.

As RDM noted, it actually is documented behaviour due to the equivalence
between generator expressions and the corresponding generator functions.

Writing a separate generator function is typically going to be cleaner
and more readable though.

Cheers,
Nick.

P.S. Here's another cute hack for terminating an iterator early:

>>> list(iter((n for n in range(10)).next, 5))
[0, 1, 2, 3, 4]

(it's nowhere near as flexible as itertools.takewhile, of course)

Cheers,
Nick.

-- 
Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia
---------------------------------------------------------------


More information about the Python-Dev mailing list