[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