7

It seems both of the below codes are printing the same, then what is the need of "else" block after "for" loop in python.

Code 1:

for i in range(10):
    print i
else:
    print "after for loop"

Code 2:

for i in range(10):
    print i

print "after for loop"

Thanks in advance.

0

3 Answers 3

7

From the documentation:

Loop statements may have an else clause; it is executed when the loop terminates through exhaustion of the list (with for) or when the condition becomes false (with while), but not when the loop is terminated by a break statement.

Follow the link for an example how this can be used.

Sign up to request clarification or add additional context in comments.

Comments

4

else executes after for providing for wasn't terminated with break:

for i in range(10):
    print i
    if i == 8:
        break # termination, no else    
else:
    print "after for loop"

3 Comments

What happens when the range is empty (i.e. when the loop body isn't executed at all)?
@AaronDigulla Then the break cannot be reached. So the loop acts as if there was no break, going to else.
@Aaron Digulla: "else" will be executed since "for" is not interrupted
1

This was originally enacted in order to get rid of all the "GOTO" statements in procedures without using flags: It means "NO BREAK"

for i, value in enumerate(sequence):
    if value == target:
        break
else:           #<-- if we finish the loop and did not encounter break, return -1
    return -1
return 1        #<-- if we did encounter break, return 1

You can watch Raymond Hettinger's Pycon talk that mentions the for/else construct here: Transforming Code into Beautiful, Idiomatic Python

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.