python中的for...else和while...else
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语义正好相反,极易引起误解,因此建议非必须情况不要使用这种写法。