本文讨论python的for…else和while…else语法,这是python中最不常用、最为误解的语法特性之一。
python中的for、while循环都有一个可选的else分支(类似if语句和try语句那样),在循环迭代正常完成之后执行。换句话说,如果我们不是以除正常方式以外的其他任意方式退出循环,那么else分支将被执行。也就是在循环体内没有break语句、没有return语句,或者没有异常出现。考虑一个简单的(无用的)例子:
>>> for i in range(5):
… print(i)
… else:
… print(‘iterated over everything ‘)
…
0
1
2
3
4
iterated over everything
上面的代码中,我们在range(5)上迭代并打印每个数字。因为我们让循环正常完成,所以else分支也被执行,并打印出iterated over everything 🙂 。相反,如果我们用break语句终止循环,那么else分支将不会执行:
>>> for i in range(5):
… if i == 2:
… break
… print(i)
… else:
… print(‘iterated over everything ‘)
…
0
1
注意,尽管循环所迭代的序列是空的,else分支依然会被执行,毕竟循环仍然是正常完成的。
>>> for i in []:
… print(i)
… else:
… print(‘still iterated over everything (i.e. nothing)’)
…
still iterated over everything (i.e. nothing)
同样不要忘记,以上所有也适应于while…else:
>>> i = 0
>>> while i