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

Gerald Britton gerald.britton at gmail.com
Tue Jan 20 17:07:21 CET 2009


Yup, I tried your idea and it does work as I intended.  It looks a
little better than using takewhile, but not (to me anyway) as nice as
my original suggestion.  Still, if my idea is ultimately rejected
(looks that way at the moment), this is a good alternative.

On Tue, Jan 20, 2009 at 10:57 AM, Alexey G. Shpagin
<python-3000 at udmvt.ru> wrote:
> On Tue, Jan 20, 2009 at 10:45:27AM -0500, Gerald Britton wrote:
>> OK, so your suggestion:
>>
>>  g = (n for n in range(100) if n*n < 50 or raiseStopIteration())
>>
>> really means "return in in the range 0-99 if n-squared is less than 50
>> or the function raiseStopIteration() returns True".
>>
>> How would this get the generator to stop once n*n >=50? It looks
>> instead like the first time around, StopIteration will be raised and
>> (presumably) the generator will terminate.
>
> Just test it. After the generator is terminated, no one will call
>  range(100).next()
> method, if I really understand you.
>
> Maybe (as suggested before with 'if ... else break`) we should rename
> function raiseStopIteration() to else_break(),
> since it looks to me being a 'if ... else break's implementation with functions.
>
> Example will look like
>  g = (n for n in range(100) if n*n < 50 or else_break())
>
> That's to the matter of taste, I think.
>
> --
> Alexey G. Shpagin
>


More information about the Python-Dev mailing list