23 Перерыв и продолжить в циклах

break заявление

Когда break оператор выполняет внутри цикла, управление потоком «разрывов» из цикла немедленно:

 i = 0
while i < 7:
    print(i)
    if i == 4:
        print("Breaking from loop")
        break
    i += 1

 

Условный цикл не будет оцениваться после break выполняется оператор. Обратите внимание , что break заявление разрешено только внутри петли, синтаксический. break заявление внутри функции не может быть использовано для завершения циклов , которые называют эту функцию.

Выполнение следующему печатает каждую цифру до числа 4 , когда break заявление не будет выполнено и цикл останавливается:

 0
1
2
3
4
Breaking from loop

 

break заявления также могут быть использованы внутри for петель, других для создания циклов , представленного Python:

 for i in (0, 1, 2, 3, 4):
    print(i)
    if i == 2:
        break

 

Выполнение этого цикла теперь печатает:

 0
1
2

 

Обратите внимание, что 3 и 4 не печатаются, так как цикл закончился.

Если цикл имеет в else положение , оно не выполняется , когда цикл завершается через break заявления.

continue заявление

continue заявление будет перейти к следующей итерации цикла , обходя остальную часть текущего блока , но продолжает цикл. Как с break , по- continue могут появляться только внутри петли:

 for i in (0, 1, 2, 3, 4, 5):
    if i == 2 or i == 4:
        continue
    print(i)

0
1
3
5

 

Обратите внимание , что 2 и 4 не печатаются, это происходит потому , что по- continue идет к следующей итерации вместо продолжения на print(i) , когда i == 2 или i == 4 .

Вложенные циклы

break и continue работать только на одном уровне цикла. Следующий пример сломается только из внутренних for цикла, а не внешние , while петель:

 while True:
    for i in range(1,5):
        if i == 2:
            break    # Will only break out of the inner loop!

 

Python не имеет возможности вырваться из нескольких уровней петли сразу - если такое поведение желательно, рефакторинга один или несколько петель в функцию и заменить break с return может быть путь.

Используйте return из функции в качестве break

return оператор выходит из функции без выполнения кода , который приходит после него.

Если у вас есть цикл внутри функции, используя return внутри этого цикла эквивалентно имеющие break в качестве остальной части кода цикла не выполняется (обратите внимание , что любой код после цикла не выполняется ни):

 def break_loop():
    for i in range(1, 5):
        if (i == 2):
            return(i)
        print(i)
    return(5)

 

Если у вас есть вложенные циклы, то return оператор будет разорвать все петлю:

 def break_all():
    for j in range(1, 5):
        for i in range(1,4):
            if i*j == 6:
                return(i)
            print(i*j)
 

будет выводить:

 1 # 1*1
2 # 1*2
3 # 1*3
4 # 1*4
2 # 2*1
4 # 2*2
# return because 2*3 = 6, the remaining iterations of both loops are not executed