Заявление Python Switch

Введение

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

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

До версии 3.10

До того, как оператор переключения Python стал доступен в языке, программистам приходилось использовать другие структуры управления для достижения той же функциональности. Одним из распространенных подходов было использование серии операторов if-else, при этом каждая ветвь кода ассоциировалась с различным значением тестируемой переменной.

Например, рассмотрим следующий код:

value = "foo"

if value == "foo":
    print("foo was selected")
elif value == "bar":
    print("bar was selected")
else:
    print("Nothing valid was selected")

В этом коде мы используем оператор if-else, чтобы определить, какую ветку кода выполнить на основе значения переменной. value. Если value равно «foo», будет выполнена первая ветка кода. Если value равно «bar», будет выполнена вторая ветка кода. В противном случае код в else блок будет выполнен.

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

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

Например, рассмотрим следующий код:

value = "foo"

switch = {
    "foo": lambda: print("foo was selected"),
    "bar": lambda: print("bar was selected"),
    "default": lambda: print("Nothing valid was selected"),
}

switch.get(value, "default")()

В этом коде мы определили словарь под названием switch, с ключами, представляющими возможные значения переменной value. Каждому ключу мы присвоили в качестве значения лямбда-функцию, содержащую соответствующую ветку кода. Для выполнения соответствующей ветки кода мы используем get() метод словаря, который позволяет нам указать значение по умолчанию, которое будет использоваться, если данный ключ не существует в словаре.

Хотя этот подход более гибок и компактен, чем использование операторов if-else, его все равно может быть сложно читать и понимать, особенно если код в каждой ветке сложен. Кроме того, он требует использования лямбда-функций, что может сбить с толку некоторых программистов. Мы не рекомендуем использовать этот метод, если по какой-то причине вы не можете использовать другие методы, описанные в этой статье.

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

Ассоциация match/case Заявление (после версии 3.10)

Начиная с версии Python 3.10, оператор переключения обрабатывается с помощью оператора match ключевое слово. Это ключевое слово используется для создания выражения сопоставления с образцом, которое позволяет проверить значение заданной переменной или выражения по ряду шаблонов. Если совпадение найдено, выполняется соответствующая ветка кода.

Например, рассмотрим следующий код:

value = "foo"

match value:
    case "foo":
        print("foo was selected")
    case "bar":
        print("bar was selected")
    case _:
        print("Nothing valid was selected")

Ознакомьтесь с нашим практическим руководством по изучению Git с рекомендациями, принятыми в отрасли стандартами и прилагаемой памяткой. Перестаньте гуглить команды Git и на самом деле изучить это!

В этом коде мы используем match ключевое слово для создания выражения сопоставления с образцом, которое проверяет значение переменной value против ряда шаблонов. Если value равно «foo», будет выполнена первая ветка кода. Если value равно «bar», будет выполнена вторая ветка кода. В противном случае будет выполнен код в блоке else.

Провалиться

Одно из ключевых отличий между операторами переключения в Python и традиционными операторами переключения в других языках заключается в том, что операторы Python match утверждение не поддерживает провал. Другими словами, как только совпадение найдено и соответствующая ветвь кода выполнена, match выражение заканчивается, и в нем нет другого кода match заявление выполняется. В других языках это обычно достигается с помощью break ключевое слово, которое здесь не требуется и не поддерживается.

Если вы хотите добиться того же поведения, что и при провале в традиционном операторе переключения, вы можете использовать оператор | оператор для соответствия нескольким случаям. Этот оператор позволяет указать несколько шаблонов в одном case, и любой из шаблонов может быть сопоставлен для запуска выполнения этой ветки.

Например, рассмотрим следующий код:

value = "y"

match value:
    case "yes" | "y":
        print("The user confirmed")
    case _:
        print("The user denied")

Здесь, если значение value равно «да» or «y», будет выполнена первая ветка кода. Это эквивалентно провалу в традиционном операторе переключения.

По умолчанию

Как вы, наверное, заметили из приведенных выше примеров, регистр «по умолчанию» обрабатывается с помощью подчеркивания (_). Это считается «подстановочным знаком» и соответствует всем значениям. Если один из предыдущих случаев соответствует значению, то ветвь кода по умолчанию пропускается и не выполняется.

Заключение

Как видите, оператор Python match (также известный как «switch») предлагает мощный и удобный способ управления ходом выполнения вашей программы. Независимо от того, являетесь ли вы новичком в Python или опытным разработчиком, оператор switch поможет вам написать более чистый и эффективный код.

Отметка времени:

Больше от Стекабьюс