[Python-ideas] for/else statements considered harmful (original) (raw)

Terry Reedy tjreedy at udel.edu
Thu Jun 7 06:31:30 CEST 2012


On 6/6/2012 7:20 PM, Alice Bevan–McGregor wrote:

Howdy!

Was teaching a new user to Python the ropes a short while ago and ran into an interesting headspace problem: the for/else syntax fails the obviousness and consistency tests.

I disagree. The else clause is executed when the condition (explicit in while loops, implicit in for loops) is false. Consider the following implementation of while loops in a lower-level pseudo-python:

label startloop if condition: do_something() goto startloop else: do_else_stuff()

This is exactly equivalent to

while condition: do_something() else: do_else)_stuff()

In fact, the absolute goto is how while is implemented in assembler languages, include CPython bytecode. If one converts a for-loop to a while-loop, you will see the same thing.

CPython bytecode for for-loops is a little more condensed, with a higher level FOR_ITER code. It tries to get the next item if there is one and catches the exception and jumps if not. (It also handles and hides the fact that there are two iterator protocols.) But still, an absolute 'goto startloop' jump back up to FOR_ITER is added to the end of the 'if next' suite, just as with while-loops.

-- Terry Jan Reedy



More information about the Python-ideas mailing list