Операторы match...case в Python (альтернатива switch...case из других ЯП)
Python

Операторы match...case в Python (альтернатива switch...case из других ЯП)

Razilator

Оператор 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:

main.py
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:

main.py
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")

Результат:

main.py
>>> x is two

В этом примере мы используем оператор match для проверки значения переменной x на соответствие четырем возможным вариантам. Первые три варианта (case 0, case 1 и case 2) соответствуют конкретным значениям переменной, а последний вариант (case _) соответствует любому другому значению (эквивалентен оператору default в операторе switch/case в других языках программирования).

Кроме того, match case позволяет использовать более сложные шаблоны для проверки значений, такие как списки и кортежи:

main.py
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

main.py
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. Он может быть использован во многих различных сценариях, таких как обработка пользовательского ввода, фильтрация данных, многопоточное программирование и т.д.

;