python中的for…else和while…else
首先讲结论:不要在for和while循环后面写else块。
python提供了一种很多语言都不支持的功能,那就是可以在循环语句后面直接写else块。
下面直接看代码。
# -*- coding: utf-8 -*-
for i in range(3):
print(i)
else:
print('this is else')
#输出
#0
#1
#2
#this is else
for i in range(3):
print(i)
break
else:
print('this is else')
#输出
#0
i = 0
while(i < 3):
print(i)
i += 1
else:
print('this is else')
#输出
#0
#1
#2
#this is else
i = 0
while(i < 3):
print(i)
i += 1
break
else:
print('this is else')
#输出
#0
可以看到这里else块的语义为:如果前面的循环块正常执行,则执行else块,如果前面的循环未执行完,则不执行else块。
这与通常意义的else块语义正好相反,通常的if…else…块语义为如果前面的if块没有执行,则执行else块。
这里还存在两种特殊情况:一如果for遍历的序列为空,那么执行else块;如果while循环初始循环条件为false,那么执行else块。
再看如下代码
# -*- coding: utf-8 -*-
for i in []:
print(i)
else:
print('this is else')
#输出
#this is else
while False:
print('hello')
else:
print('this is else')
#输出
#this is else
结论
- python支持for…else…和while…else的特殊语法,其语义为:如果前面的循环块正常执行,则执行else块,如果前面的循环未执行完,则不执行else块。
- 这种语法与通常意义的else语义正好相反,极易引起误解,因此建议非必须情况不要使用这种写法。