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

Gerald Britton gerald.britton at gmail.com
Tue Jan 20 16:45:27 CET 2009


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.


On Tue, Jan 20, 2009 at 10:38 AM, Alexey G. Shpagin
<python-3000 at udmvt.ru> wrote:
> On Tue, Jan 20, 2009 at 09:24:32AM -0500, Gerald Britton wrote:
>> hmmm...doesn't:
>>
>>     if n*n < 50 or raise StopIteration()
>>
>> really mean, "Return an integer in the range 0-99 if n-squared is less
>> than fifty or the statement 'raise StopIteration()' returns True" ?
>>
>> I'm not sure that that will work.
> Well, your variant will trigger syntax error (and will not work surely).
>
> To make it work we need a function, that raises StopIteration.
> exactly as I have suggested.
>
>>
>> On Tue, Jan 20, 2009 at 9:18 AM,  <python-3000 at udmvt.ru> wrote:
>> > On Mon, Jan 19, 2009 at 10:10:00AM -0500, Gerald Britton wrote:
>> >> Please find below PEP 3142: Add a "while" clause to generator
>> >> expressions.  I'm looking for feedback and discussion.
>> >>
>> > ...
>> >>       g = (n for n in range(100) while n*n < 50)
>> >
>> > May I suggest you this variant?
>> >
>
>> >        def raiseStopIteration():
>> >                raise StopIteration
>> >
>> >        g = (n for n in range(100) if n*n < 50 or raiseStopIteration())
>
> --
> Alexey G. Shpagin
>


More information about the Python-Dev mailing list