Операторы match...case в Python (альтернатива switch...case из других ЯП)
Оператор match case был добавлен в Python 3.10 и предоставляет альтернативу условным операторам if-elif-else и конструкции switch-case. Он позволяет сравнивать значение переменной со списком значений и выполнять соответствующий блок кода в зависимости от совпадения.
Синтаксис оператора
Синтаксис оператора match case выглядит следующим образом:
match expression:
case value1:
# блок кода для value1
case value2:
# блок кода для value2
case value3:
# блок кода для value3
...
case valueN:
# блок кода для valueN
case _:
# блок кода для остальных случаев
Здесь expression - выражение, которое нужно проверить на соответствие с каждым значением в списке case. Значения case могут быть любыми константами или литералами, такими как числа, строки, переменные и т.д. Значение _ используется для отображения блока кода для всех остальных случаев.
Примеры использования
Давайте рассмотрим простой пример использования match case. Допустим, мы хотим вывести разные сообщения в зависимости от значения переменной x:
x = 2
if x == 0:
print("x is zero")
elif x == 1:
print("x is one")
elif x == 2:
print("x is two")
else:
print("x is something else")
Как это сделать с оператором match-case:
x = 2
match x:
case 0:
print("x is zero")
case 1:
print("x is one")
case 2:
print("x is two")
case _:
print("x is something else")
Результат:
>>> x is two
В этом примере мы используем оператор match для проверки значения переменной x на соответствие четырем возможным вариантам. Первые три варианта (case 0, case 1 и case 2) соответствуют конкретным значениям переменной, а последний вариант (case _) соответствует любому другому значению (эквивалентен оператору default в операторе switch/case в других языках программирования).
Кроме того, match case позволяет использовать более сложные шаблоны для проверки значений, такие как списки и кортежи:
x = (1, 3)
match x:
case (0, 0):
print("x is (0, 0)")
case (1, 2):
print("x is (1, 2)")
case (1, _):
print("x is (1, something)")
case _:
print("x is something else")
Результат:
>>> x is (1, something)
В этом примере мы проверяем значение кортежа x на соответствие трем возможным вариантам.
Вы можете немного упростить операторы case, комбинируя условия, с которыми вы сравниваете. Например, вы можете проверить, соответствует ли шаблон status_code нескольким литералам. Для этого вы должны изменить свой код следующим образом: case 400|401|403
status_code = 400
match status_code:
case 400|401|403:
print('Bad request')
case 200:
print('Work!')
case _:
print('Something went wrong')
Результат:
>>> Bad request
В целом, оператор match case предоставляет более элегантный и удобный способ выполнения условных проверок, чем конструкции if-elif-else и switch-case. Он может быть использован во многих различных сценариях, таких как обработка пользовательского ввода, фильтрация данных, многопоточное программирование и т.д.