Bruce Leban wrote:
On Fri, Aug 29, 2008 at 6:19 AM, Mathias Panzenböck <email@example.com mailto:firstname.lastname@example.org> wrote:
Bruce Frederiksen wrote: > We already have statements that only apply within loops (break and > continue), how about some expressions that only apply in for loops: > 'last' and 'empty': I don't know. I don't like either. What about named loops/loop objects? Using this you have no need for new keywords: myloop = for x in items: result += str(x) if not myloop.last: result += ', ' if myloop.empty: result = 'no data'
This is interesting. I don't like the fact that you have the loop variable scope extending past the end of the loop and it's not clear what we can do with that. It occurs to me that we can do something like this without changes to the language but it's clumsy:
for x in funky(items): result += str(x.value) if not x.last(): result += ', ' else: if x == funky_empty: result = 'no data'
So x.first seems to make more sense than x.last. You could also name the loops like:
outer = funky(items1) for x in outer: middle = funky(items2) for y in middle: inner = funky(items3) for z in inner: middle.continue_()
It seems to implement this, funky.continue_ and funky.break_ would have to raise exceptions. If the for loop honored the 'throw' method (of generators), it seems like this might be made to work...