Else clause on Python while statement

前端 未结 12 2176
悲&欢浪女
悲&欢浪女 2020-11-22 08:24

I\'ve noticed the following code is legal in Python. My question is why? Is there a specific reason?

n = 5
while n != 0:
    print n
    n -= 1
else:
    pri         


        
12条回答
  •  醉酒成梦
    2020-11-22 08:59

    In reply to Is there a specific reason?, here is one interesting application: breaking out of multiple levels of looping.

    Here is how it works: the outer loop has a break at the end, so it would only be executed once. However, if the inner loop completes (finds no divisor), then it reaches the else statement and the outer break is never reached. This way, a break in the inner loop will break out of both loops, rather than just one.

    for k in [2, 3, 5, 7, 11, 13, 17, 25]:
        for m in range(2, 10):
            if k == m:
                continue
            print 'trying %s %% %s' % (k, m)
            if k % m == 0:
                print 'found a divisor: %d %% %d; breaking out of loop' % (k, m)
                break
        else:
            continue
        print 'breaking another level of loop'
        break
    else:
        print 'no divisor could be found!'
    

    For both while and for loops, the else statement is executed at the end, unless break was used.

    In most cases there are better ways to do this (wrapping it into a function or raising an exception), but this works!

提交回复
热议问题