Python for循环语句之for-else/while-else
- for
- for-else
- 对比
- while-else
for
在Python中for循环可以遍历任何序列的项目,如一个列表或者一个字符串。
for i in [1, 2, 3]:
print(i)
for i in 'Python':
print(i)
1
2
3
P
y
t
h
o
n
for-else
else语句会在for循环因可迭代对象耗尽的时候执行,但是不会在循环被break语句终止时执行。
在for循环中还有一种情况就是for-else
for i in range(3):
print('for语句')
else:
print('else语句')
print('结束for循环')
for语句
for语句
for语句
else语句
结束for循环
在for循环正常执行结束时,会执行else
即使是不进入for循环内部,也会执行else
for i in []:
print('for语句')
else:
print('else语句')
print('结束for循环')
else语句
结束for循环
在for循环中执行了break语句而跳出循环时,不会执行else:
for i in range(3):
if i == 1:
break # 增加了break
print('for语句')
else:
print('else语句')
print('结束for循环')
for语句
结束for循环
如果for循环中有break语句,但是没有执行,同样会执行else语句:
for i in range(3):
if i == 10: # 修改了判断的值
break
print('for语句')
else:
print('else语句')
print('结束for循环')
for语句
for语句
for语句
else语句
结束for循环
可以总结出:
- for-else的运行流程不同于if-else:if-else的执行是非此即彼,而for-else更像是else是作为for循环的一部分;
- 当循环中出现了break,并且被执行从而将for循环中断时,不执行else;
- else只执行一次。
对比
假设我们需要在一个list中找到某个值,并在for循环中做其他操作(如果不需要其他操作,那直接用in
即可)
如果不用for-else,我们需要这样实现
flagfound = False
for i in ['java', 'cpp', 'python', 'c#']:
if i == 'python':
flagfound = True
break
print('执行更多其他的操作')
if not flagfound:
raise ValueError("List中找不到python字符串")
如果使用for-else:
for i in ['java', 'cpp', 'python', 'c#']:
if i == 'python':
break
print('执行更多其他的操作')
else:
raise ValueError("List中找不到python字符串")
在第一种情况下,绑定不那么强,需要引入额外变量,并且在维护过程中可能会引入错误。
在第二种情况下,raise它与它所使用的 for 循环紧密绑定,不需要引入额外变量。
while-else
while-else和for-else一样,else语句会在while条件变为False的时候执行,但是不会在循环被break语句终止时执行。
i = 0
while i < 3:
i += 1
print('while语句')
else:
print('else语句')
print('结束while循环')
while语句
while语句
while语句
else语句
结束while循环
while False:
print('while语句')
else:
print('else语句')
print('结束while循环')
else语句
结束while循环
i = 0
while i < 3:
if i == 1:
break # 增加了break
i += 1
print('while语句')
else:
print('else语句')
print('结束while循环')
while语句
结束while循环
参考链接:
https://www.runoob.com/python/python-for-loop.html