Перейти к содержимому

Для чего используется инструкция break

  • автор:

Циклы for и while, операторы break и continue, волшебное слово else

Python 3 логотип

В этой статье я расскажу о циклах for и while, операторах break и continue, а также о слове else, которое, будучи употребленное с циклом, может сделать программный код несколько более понятным.

Цикл while

While — один из самых универсальных циклов в Python, поэтому довольно медленный. Выполняет тело цикла до тех пор, пока условие цикла истинно.

Цикл for уже чуточку сложнее, чуть менее универсальный, но выполняется гораздо быстрее цикла while. Этот цикл проходится по любому итерируемому объекту (например строке или списку), и во время каждого прохода выполняет тело цикла.

Оператор continue

Оператор continue начинает следующий проход цикла, минуя оставшееся тело цикла (for или while)

Оператор break

Оператор break досрочно прерывает цикл.

Слово else, примененное в цикле for или while, проверяет, был ли произведен выход из цикла инструкцией break, или же «естественным» образом. Блок инструкций внутри else выполнится только в том случае, если выход из цикла произошел без помощи break.

Для вставки кода на Python в комментарий заключайте его в теги

  • Модуль csv - чтение и запись CSV файлов
  • Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
  • Онлайн-обучение Python: сравнение популярных программ
  • Книги о Python
  • GUI (графический интерфейс пользователя)
  • Курсы Python
  • Модули
  • Новости мира Python
  • NumPy
  • Обработка данных
  • Основы программирования
  • Примеры программ
  • Типы данных в Python
  • Видео
  • Python для Web
  • Работа для Python-программистов
  • Сделай свой вклад в развитие сайта!
  • Самоучитель Python
  • Карта сайта
  • Отзывы на книги по Python
  • Реклама на сайте

Оператор break (C++)

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

Синтаксис

break; 

Замечания

Оператор break используется с оператором условного коммутатора и с помощью инструкций do, for, и в то время как операторы цикла.

switch В инструкции инструкция приводит к тому, break что программа выполняет следующую инструкцию за пределами инструкции switch . break Без инструкции выполняется каждая инструкция из соответствующей case метки до конца switch инструкции, включая default предложение.

В циклах break оператор завершает выполнение ближайшего заключенного do for оператора или while оператора. Управление передается оператору, который расположен после завершенного оператора, при его наличии.

В вложенных инструкциях break оператор заканчивается только оператором , for switch или while оператором do , который немедленно заключает его. Вы можете использовать инструкцию return или goto инструкцию для передачи управления из более глубоко вложенных структур.

Пример

В следующем коде показано, как использовать инструкцию break в цикле for .

#include using namespace std; int main() < // An example of a standard for loop for (int i = 1; i < 10; i++) < if (i == 4) < break; >cout // An example of a range-based for loop int nums []; for (int i : nums) < if (i == 4) < break; >cout > 
In each case: 1 2 3 

В следующем коде показано, как использовать break цикл while и do цикл.

#include using namespace std; int main() < int i = 0; while (i < 10) < if (i == 4) < break; >cout i = 0; do < if (i == 4) < break; >cout while (i
In each case: 0123 

В следующем коде показано, как использовать break в инструкции switch. В каждом случае необходимо использовать break , если вы хотите обрабатывать каждый случай отдельно. Если вы не используете break , выполнение кода переходит к следующему варианту.

#include using namespace std; enum Suit< Diamonds, Hearts, Clubs, Spades >; int main() < Suit hand; . . . // Assume that some enum value is set for hand // In this example, each case is handled separately switch (hand) < case Diamonds: cout // In this example, Diamonds and Hearts are handled one way, and // Clubs, Spades, and the default value are handled another way switch (hand) < case Diamonds: case Hearts: cout > 

Операторы перехода — break , continue , return и goto

Операторы перехода безоговорочно передают управление. Оператор break завершает ближайшее заключающее оператор итерации или switch инструкцию. Оператор continue запускает новую итерацию ближайшего заключенного оператора итерации. Оператор return завершает выполнение функции, в которой она отображается, и возвращает элемент управления вызывающему объекту. Оператор goto передает элемент управления инструкции, помеченной меткой.

Инструкция break

Оператор break завершает выполнение ближайшего внешнего оператора итерации (то есть цикла for , foreach , while или do ) или оператора switch . Оператор break передает управление оператору, который расположен после завершенного оператора (если таковой есть).

int[] numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; foreach (int number in numbers) < if (number == 3) < break; >Console.Write($" "); > Console.WriteLine(); Console.WriteLine("End of the example."); // Output: // 0 1 2 // End of the example. 

Во вложенных циклах оператор break завершает только самый внутренний цикл, содержащий его, как показано в следующем примере:

for (int outer = 0; outer < 5; outer++) < for (int inner = 0; inner < 5; inner++) < if (inner >outer) < break; >Console.Write($" "); > Console.WriteLine(); > // Output: // 0 // 0 1 // 0 1 2 // 0 1 2 3 // 0 1 2 3 4 

При использовании оператора switch внутри цикла оператор break в конце раздела switch передает управление только из оператора switch . Цикл, содержащий оператор switch , не затрагивается, как показано в следующем примере:

double[] measurements = [-4, 5, 30, double.NaN]; foreach (double measurement in measurements) < switch (measurement) < case < 0.0: Console.WriteLine($"Measured value is ; too low."); break; case > 15.0: Console.WriteLine($"Measured value is ; too high."); break; case double.NaN: Console.WriteLine("Failed measurement."); break; default: Console.WriteLine($"Measured value is ."); break; > > // Output: // Measured value is -4; too low. // Measured value is 5. // Measured value is 30; too high. // Failed measurement. 

Инструкция continue

Оператор continue начинает новую итерацию ближайшего внешнего оператора итерации (то есть цикла for , foreach , while или do ), как показано в следующем примере:

for (int i = 0; i < 5; i++) < Console.Write($"Iteration : "); if (i < 3) < Console.WriteLine("skip"); continue; >Console.WriteLine("done"); > // Output: // Iteration 0: skip // Iteration 1: skip // Iteration 2: skip // Iteration 3: done // Iteration 4: done 

Инструкция return

Оператор return завершает выполнение метода, в котором он присутствует, и возвращает управление и результат функции (при его наличии) вызывавшему методу.

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

Console.WriteLine("First call:"); DisplayIfNecessary(6); Console.WriteLine("Second call:"); DisplayIfNecessary(5); void DisplayIfNecessary(int number) < if (number % 2 == 0) < return; >Console.WriteLine(number); > // Output: // First call: // Second call: // 5 

Как показано в предыдущем примере, для досрочного завершения члена функции обычно используется оператор return без выражения. Если член функции не содержит оператор return , он завершается после выполнения последнего оператора.

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

double surfaceArea = CalculateCylinderSurfaceArea(1, 1); Console.WriteLine($""); // output: 12.57 double CalculateCylinderSurfaceArea(double baseRadius, double height)

Если оператор return содержит выражение, это выражение должно допускать неявное преобразование в тип возвращаемого значения члена функции, если только он не является асинхронным. Выражение, возвращаемое функцией async , должно быть неявно преобразовано в аргумент Task типа или ValueTask независимо от типа возвращаемого типа функции. Если тип возвращаемого значения функции async — Task или ValueTask, используется оператор return без выражения.

Возвраты по ссылке

По умолчанию оператор return возвращает значение выражения. Вы можете вернуть ссылку на переменную. Возвращаемые ссылочные значения — это значения, которые метод возвращает вызывающему объекту по ссылке. То есть вызывающий объект может изменить значение, возвращаемое методом, и это изменение отражается в состоянии объекта в вызываемом методе. Для этого используйте инструкцию return с ref ключевое слово, как показано в следующем примере:

int[] xs = [10, 20, 30, 40]; ref int found = ref FindFirst(xs, s => s == 30); found = 0; Console.WriteLine(string.Join(" ", xs)); // output: 10 20 0 40 ref int FindFirst(int[] numbers, Func predicate) < for (int i = 0; i < numbers.Length; i++) < if (predicate(numbers[i])) < return ref numbers[i]; >> throw new InvalidOperationException("No element satisfies the given condition."); > 

Возвращаемое ссылочное значение позволяет методу вернуть вызывающей стороне ссылку на переменную, а не фиксированное значение. После этого вызывающий может самостоятельно решить, как обрабатывать полученную переменную: по значению или по ссылке. Вызывающий объект может создать новую переменную, которая является ссылкой на возвращаемое значение, называемое локальным ссылкой. Возвращаемое ссылочное значение означает, что метод возвращает ссылку на некоторую переменную (или ее псевдоним). В область действия переменной должен входить этот метод. Время существования переменной должно продолжаться после того, как метод возвращает управление. Все изменения, которые вызывающий производит с возвращаемым значением метода, применяются к возвращенной переменной.

Если для метода объявлено возвращаемое ссылочное значение, значит он возвращает псевдоним переменной. Цель разработки часто заключается в том, что вызов кода обращается к этой переменной с помощью псевдонима, в том числе для изменения. Методы, возвращаемые по ссылке, не могут иметь тип возвращаемого значения void .

Чтобы вызывающий объект изменял состояние объекта, возвращаемое значение ссылки должно храниться в переменной, которая явно определяется как эталонная переменная.

Возвращаемое ref значение — это псевдоним другой переменной в область вызываемого метода. Любое применение возвращаемого ссылочного значения можно рассматривать как применение псевдонима соответствующей переменной.

  • При назначении его значения вы назначаете значение переменной, которую он псевдонимирует.
  • При чтении его значения вы считываете значение переменной, которую он псевдонимирует.
  • Если вы возвращаете его по ссылке, вы возвращаете псевдоним в ту же переменную.
  • Если передать его другому методу по ссылке, вы передаете ссылку на переменную, которую он псевдонимирует.
  • Создавая для псевдонима локальную ссылочную переменную, вы создаете новый псевдоним для той же переменной.

Возвращаемое значение ref должно быть ref-safe-context для вызывающего метода. Это означает:

  • Время существования возвращаемого значения должно превышать период выполнения метода. Другими словами, это не может быть локальная переменная в методе, который возвращает его. Это может быть экземпляр статического поля или класса, а также переданный в метод аргумент. Попытка вернуть локальную переменную создает ошибку компилятора CS8168, "Не удается вернуть локальный obj по ссылке, так как он не является локальным.
  • Возвращаемое значение не может быть литеральным null . Метод с возвратом ссылок может возвращать псевдоним переменной, значение которой в настоящее время null является значением (неинстанизированным) или типом значения NULL для типа значения.
  • Возвращаемое значение не может быть константой, элементом перечисления, возвращаемым значением из свойства или методом или class struct .

Кроме того, значения возвращаемых ссылок не допускаются для асинхронных методов. Асинхронный метод может вернуть управление до того, как будет завершено его выполнение и станет известно его возвращаемое значение.

Метод, возвращающий возвращаемое значение ссылки, должен:

  • Добавьте ссылку ключевое слово перед типом возвращаемого значения.
  • Каждый оператор return в теле метода включает ключевое слово ref перед именем возвращаемого экземпляра.

В следующем примере показан метод, который удовлетворяет указанным условиям и возвращает ссылку на объект Person с именем p :

public ref Person GetContactInformation(string fname, string lname) < // . method implementation. return ref p; >

Ниже приведен более полный пример возвращаемого ссылочного значения, в котором показаны сигнатура и тело метода.

public static ref int Find(int[,] matrix, Func predicate)

Вызываемый метод может также объявить возвращаемое значение ref readonly , чтобы вернуть значение по ссылке, и запретить вызывающему коду изменять возвращаемое значение. Вызывающий метод может избежать копирования возвращаемого значения, сохраняя значение в локальной ref readonly эталонной переменной.

В следующем примере определяется класс Book , содержащий два поля String: Title и Author . Также определяется класс BookCollection , который включает частный массив объектов Book . Отдельные объекты книг возвращаются по ссылке путем вызова метода GetBookByTitle .

 public class Book < public string Author; public string Title; >public class BookCollection < private Book[] books = < new Book < Title = "Call of the Wild, The", Author = "Jack London" >, new Book < Title = "Tale of Two Cities, A", Author = "Charles Dickens" >>; private Book nobook = null; public ref Book GetBookByTitle(string title) < for (int ctr = 0; ctr < books.Length; ctr++) < if (title == books[ctr].Title) return ref books[ctr]; >return ref nobook; > public void ListBooks() < foreach (var book in books) < Console.WriteLine($", by "); > Console.WriteLine(); > > 

Если вызывающий объект сохраняет значение, возвращаемое методом GetBookByTitle , в качестве ссылочной локальной переменной, изменения, которые этот объект вносит в возвращаемое значение, отражаются в объекте BookCollection , как показано в следующем примере.

var bc = new BookCollection(); bc.ListBooks(); ref var book = ref bc.GetBookByTitle("Call of the Wild, The"); if (book != null) book = new Book < Title = "Republic, The", Author = "Plato" >; bc.ListBooks(); // The example displays the following output: // Call of the Wild, The, by Jack London // Tale of Two Cities, A, by Charles Dickens // // Republic, The, by Plato // Tale of Two Cities, A, by Charles Dickens 

Инструкция goto

Оператор goto передает управление оператору, помеченному меткой, как показано в следующем примере:

var matrices = new Dictionary < ["A"] = [ [1, 2, 3, 4], [4, 3, 2, 1] ], ["B"] = [ [5, 6, 7, 8], [8, 7, 6, 5] ], >; CheckMatrices(matrices, 4); void CheckMatrices(Dictionary matrixLookup, int target) < foreach (var (key, matrix) in matrixLookup) < for (int row = 0; row < matrix.Length; row++) < for (int col = 0; col < matrix[row].Length; col++) < if (matrix[row][col] == target) < goto Found; >> > Console.WriteLine($"Not found in matrix ."); continue; Found: Console.WriteLine($"Found in matrix ."); > > // Output: // Found 4 in matrix A. // Not found 4 in matrix B. 

Как показано в предыдущем примере, для выхода из вложенного цикла можно использовать оператор goto .

При работе с вложенными циклами рассмотрите возможность рефакторинга отдельных циклов в отдельные методы. В результате вы можете получить упрощенный, более удобочитаемый код без оператора goto .

В операторе switch можно также использовать оператор goto для передачи управления в раздел switch с меткой константы case, как показано в следующем примере:

using System; public enum CoffeeChoice < Plain, WithMilk, WithIceCream, >public class GotoInSwitchExample < public static void Main() < Console.WriteLine(CalculatePrice(CoffeeChoice.Plain)); // output: 10.0 Console.WriteLine(CalculatePrice(CoffeeChoice.WithMilk)); // output: 15.0 Console.WriteLine(CalculatePrice(CoffeeChoice.WithIceCream)); // output: 17.0 >private static decimal CalculatePrice(CoffeeChoice choice) < decimal price = 0; switch (choice) < case CoffeeChoice.Plain: price += 10.0m; break; case CoffeeChoice.WithMilk: price += 5.0m; goto case CoffeeChoice.Plain; case CoffeeChoice.WithIceCream: price += 7.0m; goto case CoffeeChoice.Plain; >return price; > > 

В операторе switch можно также использовать оператор goto default; для передачи управления в раздел switch с меткой default .

Если метка с заданным именем не существует в текущем элементе функции или если goto инструкция не находится в область метки, возникает ошибка во время компиляции. То есть инструкцию goto нельзя использовать для передачи управления из текущего элемента функции или в вложенные область.

Спецификация языка C#

Дополнительные сведения см. в следующих разделах статьи Спецификация языка C#:

  • Оператор break
  • Оператор continue
  • Оператор return
  • Оператор goto

См. также

  • справочник по C#
  • Инструкция yield

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Использование выражений Break, Continue и Pass при работе с циклами в Python 3

Использование выражений Break, Continue и Pass при работе с циклами в Python 3

Использование циклов for и циклов while в Python помогает эффективно автоматизировать и воспроизводить задачи.

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

Выражение Break

В Python выражение break дает вам возможность выйти из цикла при активации внешнего условия. Выражение break помещается в блок кода внутри выражения loop, обычно после условного выражения if .

Рассмотрим пример использования выражения break в цикле for :

number = 0 for number in range(10): if number == 5: break # break here print('Number is ' + str(number)) print('Out of loop') 

В этой небольшой программе переменная number инициализируется как 0. Затем выражение for строит цикл, пока значение переменной number составляет меньше 10.

В цикле for имеется выражение if , которое задает условие, что если значение переменной number равно целому числу 5, то цикл прекращается.

В цикле также содержится выражение print() , которое выполняется с каждой итерацией цикла for , пока цикл не прекращается, поскольку оно располагается после выражения break .

Чтобы узнавать о выходе из цикла, мы добавили завершающее выражение print() вне цикла for .

При выполнении этого кода результат будет выглядеть следующим образом:

Output
Number is 0 Number is 1 Number is 2 Number is 3 Number is 4 Out of loop

Это показывает, что когда переменная number оценивается как эквивалентная целому числу 5, цикл прекращается, поскольку программа получает соответствующее указание через выражение break .

Выражение break заставляет программу выйти из цикла.

Выражение Continue

Выражение continue дает возможность пропустить часть цикла, где активируется внешнее условие, но при этом выполнить остальную часть цикла. При этом прерывается текущая итерация цикла, но программа возвращается к началу цикла.

Выражение continue размещается в блоке кода под выражением цикла, обычно после условного выражения if .

Мы используем ту же программу с циклом for , что и в разделе «Выражение Break» выше, но при этом используем выражение continue вместо выражения break :

number = 0 for number in range(10): if number == 5: continue # continue here print('Number is ' + str(number)) print('Out of loop') 

Отличие выражения continue от выражения break заключается в том, что код продолжит выполняться несмотря на прерывание, если значение переменной number будет оценено как равное 5. Давайте посмотрим на результаты:

Output
Number is 0 Number is 1 Number is 2 Number is 3 Number is 4 Number is 6 Number is 7 Number is 8 Number is 9 Out of loop

В этом выводе условие Number is 5 никогда не выполняется, но цикл продолжается после этого, чтобы выводить линии для чисел 6–10 до выхода из цикла.

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

Выражение continue заставляет программу пропустить определенную часть цикла, а затем продолжить выполнение оставшейся части цикла.

Выражение Pass

При активации внешнего условия выражение pass позволяет обрабатывать условия без влияния на цикл; чтение кода будет продолжаться до появления выражения break или другого выражения.

Как и в случае с другими выражениями, выражение pass будет содержаться в блоке кода до выражения loop, обычно после условного выражения if .

Используя тот же код выше, попробуйте заменить выражение break или continue выражением pass :

number = 0 for number in range(10): if number == 5: pass # pass here print('Number is ' + str(number)) print('Out of loop') 

Выражение pass , появляющееся после условного выражения if , указывает программе на необходимость продолжить выполнение цикла и игнорировать тот факт, что переменная number оценивается как равная 5 во время одной из итераций.

Мы запустим программу и оценим вывод:

Output
Number is 0 Number is 1 Number is 2 Number is 3 Number is 4 Number is 5 Number is 6 Number is 7 Number is 8 Number is 9 Out of loop

Используя выражение pass в этой программе, мы видим, что программа работает точно так же, как если бы в ней не было условного выражения. Выражение pass предписывает программе игнорировать это условие и продолжать обычное выполнение программы.

Выражение pass может создавать минимальные классы или выступать в качестве замещающего элемента при работе с новым кодом и действовать на уровне алгоритмов, прежде чем отрабатывать детали.

Заключение

Выражения break , continue и pass в Python позволяют использовать циклы for и while в вашем коде более эффективно.

Чтобы больше поработать с выражениями break и pass , вы можете выполнить учебный модуль нашего проекта «Создание бота Twitterbot с помощью Python 3 и библиотеки Tweepy».

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *