for i in range(10):
print(i)
if i != 5:
continue
break
else:
print("aaa")
等价于:
for i in range(10):
print(i)
if i != 5:
continue
else:
break
else:
print("aaa")
输出为:
0
1
2
3
4
5
意思是如果if条件不满足,内层else即break,则不会执行外层的else
若if一直满足,则会执行外层的else,即:该 else 子句在循环正常完成时执行,这意味着循环没有遇到任何 break 语句
修改为:
for i in range(10):
print(i)
if i != 50:
continue
else:
break
else:
print("aaa")
输出为:
0
1
2
3
4
5
6
7
8
9
aaa
作用:在某些场景下,需要设置标记位,在循环结束之后使用标记位
举例:有一个列表,判断是否有大于0的元素,有则执行A操作,否则执行B操作
正常情况:
def func(ls):
flag = 0
for x in ls:
if x > 0:
flag = 1
break
if flag == 0:
print("No")
使用for-else:
def func2(ls):
for x in ls:
if x < 0:
continue
break
else:
print("No")
两者的作用一样,但是下面这个方式更符合pythonic,但是《Effective Python》第12条:不要使用for/else和while/else,可以作为语法糖了解一下