[Python-ideas] for/else statements considered harmful
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