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

2009-01-20 Thread Alexey G. Shpagin
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,   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
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


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

2009-01-20 Thread Alexey G. Shpagin
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
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com