Введение
Оператор 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 поможет вам написать более чистый и эффективный код.