Re: [Python-Dev] PEP 3142: Add a "while" clause to generator expressions
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
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