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   

结论

  1. python支持for…else…和while…else的特殊语法,其语义为:如果前面的循环块正常执行,则执行else块,如果前面的循环未执行完,则不执行else块。
  2. 这种语法与通常意义的else语义正好相反,极易引起误解,因此建议非必须情况不要使用这种写法。

猜你喜欢

转载自blog.csdn.net/zzl_python/article/details/82977710