目录

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