What is the use of "else" after "for" loop in Python?
Question:
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.
Answers:
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"
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.
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
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.
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"
Loop statements may have an
else
clause; it is executed when the loop terminates through exhaustion of the list (withfor
) or when the condition becomes false (withwhile
), but not when the loop is terminated by abreak
statement.
Follow the link for an example how this can be used.
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