目录
1、跳出函数
2、跳出多重循环
2.1、for…else
2.1.1、跳出1层循环
2.1.2、跳出 2 层循环
2.1.3、跳出 3 层循环
2.2、包装成函数
2.3、flag 大法好
2.4、抛出异常
2.5、笛卡尔积
1、跳出函数
pass: 当编写一个程序时,你还没有完成执行语句部分的思路,这时你可以用pass语句来占位,也可以当做是一个标记,等过后来完成的代码。pass只会跳过与pass同级别缩进下的代码。并不能直接跳出函数,除非函数中pass之后的代码的缩进与pass同级。
break: 跳出所在的当前整个循环,到外层代码继续执行。
continue: 跳出本次循环(一次循环),从下一个迭代继续运行循环,内层循环执行完毕,外层代码继续运行。
return: 直接返回函数,所有该函数体内的代码(包括循环体)都不会再执行。
2、跳出多重循环
由于需要读取文件,并进行匹配,很容易写出三四重循环,但是如何跳出多重循环却成了一个问题
2.1、for…else
普通的 break 只能跳出当前循环,即只能跳出一层循环
for... else 相对比较难理解,而且逻辑看起来比较复杂
for…else:其中else块中的语句将在 for 循环正常得、完整得执行过之后才会被执行,如果 for 循环被 break ,则 else 块将不会被执行。
2.1.1、跳出1层循环
dic = {3, 4}
for i in range(0, 5): # 【1】
for j in range(100, 102): # 【2】
for data in dic: # 【3】
if i == data:
print("i:",i)
break # 只跳出 第【3】重循环
输出:
i: 3
i: 3
i: 4
i: 4
2.1.2、跳出 2 层循环
dic = {3, 4}
for i in range(0, 5): # 【1】
for j in range(100, 102): # 【2】
for data in dic: # 【3】
if i == data:
print("i:",i)
break # break(1) , 只跳出 第【3】重循环
else: # else(1)
continue # continue(1)
break # break(2)
输出:
i: 3
i: 4解释:
当 if 不成立,即第【3】重 for 的 break(1) 未执行,则执行完第【3】重 for,开始执行 else(1) = > continue(1) => 继续执行下一轮的 第【2】重 for 循环(break(2) 未执行)
当 if 成立,即第【3】重 for 的 break(1) 被执行,则 else(1) 不执行,直接执行 break(2),即跳出 第【2】重 for ,执行下一轮的第【1】重 for。所以输出 2 个 i。
2.1.3、跳出 3 层循环
dic = {3, 4}
for i in range(0, 5): # 【1】
for j in range(100, 102): # 【2】
for data in dic: # 【3】
if i == data:
print("i:",i)
break # break(1) , 只跳出 第【3】重循环
else: # else(1)
continue # continue(1)
break # break(2)
else: # else(2)
continue # continue(2)
break # break(3)
输出:
i: 3
实现了只要 if 成立,则跳出所有循环
解释:
break(1) => break(2) => break(3)
三个break 直接跳出所有循环 (其中的 else 均未执行,因为 只有当for正常执行才会执行 else,一旦 for 被 break了,那么 else 就不执行,直接直接 else 下一行的 break了 )
2.2、包装成函数
因为函数的 return 可以直接跳出所有循环
def work():
for i in range(10):
for j in range(10):
if i+j > 5:
return i,j
print work()
2.3、flag 大法好
dic = {3, 4}
flag = False
for i in range(0, 5): # 【1】
for j in range(100, 102): # 【2】
for data in dic: # 【3】
if i == data:
print("i:",i)
flag = True
if flag:
break
if flag:
break
2.4、抛出异常
class Break(Exception):
pass
try:
for i in range(3):
for j in range(3):
for k in range(3):
print(i, j, k)
if i == j == k == 1:
raise Break('break')
except Break as e:
print(e)
2.5、笛卡尔积
这种方法的思路就是,既然可以跳出单循环,我就将多重循环改写为单循环,这可以利用itertools中的笛卡尔积函数product,例如
from itertools import product
for i, j, k in product(range(3), range(3), range(3)):
print(i, j, k)
if i == j == k == 1:
print('break')
break