[Python-ideas] Variations on a loop

Mathias Panzenböck grosser.meister.morti at gmx.net
Fri Aug 29 15:19:59 CEST 2008

Bruce Frederiksen wrote:
> Bruce Leban wrote:
>> For example:
>>     result = ""
>>     for x in items:
>>         result += str(x)
>>     interstitially:
>>         result += ", "
>>     contrariwise:
>>         result = "no data"
> 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':
> for x in items:
>    result += str(x)
>    if not last:
>        result += ', '
> else:
>    if empty:
>        result = "no data"
> -bruce (not to be confused with Bruce :-)

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'

However, how to calculate the last property for generators where it might depend
on some side effects if it's really the last item?

Other things would be possible, too:

a = for x in xs:
	b = for y in ys:
		c = for z in zs:
			if cond(z):
				break b
			if cond(y):
				continue a

However, this would increase clutter and might be a bad idea for the same reason
goto is a bad idea. I also would be possible to pass the loop object to another
function which then might call continue/break which changes the controlflow
completely and makes the code very hard to read. So I guess this is a bad idea.


More information about the Python-ideas mailing list