Case Python 3: примеры

Конструкция `match` в Python 3

Конструкция `match` в Python 3 – это мощный инструмент, введенный в версии 3.10, который позволяет выполнять сопоставление с образцами (pattern matching). Он предоставляет более гибкий и читаемый способ разветвления кода по различным условиям, похожий на конструкциях switch в других языках программирования.

Основные принципы

  • Сопоставление с образцами: match пытается сопоставить значение с одним из образцов, указанных в блоке case. Если соответствие найдено, выполняется код в блоке case.
  • Порядок выполнения: match выполняет проверку образцов последовательно, от первого к последнему. Если соответствие найдено, дальнейшие проверки не происходят.
  • Условие `_`: Условие _ (подчеркивание) используется для задания поведения по умолчанию, если ни один из предыдущих образцов не совпал.
  • Переменные в образцах: В образцах можно использовать переменные для захвата значений, соответствующих образцу.

Примеры

1. Простой пример

def get_message(day):
    match day:
        case "понедельник":
            return "С началом рабочей недели!"
        case "пятница":
            return "До выходных осталось совсем немного!"
        case _:
            return "Какой-то другой день."

print(get_message("понедельник")) # Выведет: "С началом рабочей недели!"
print(get_message("пятница")) # Выведет: "До выходных осталось совсем немного!"
print(get_message("среда")) # Выведет: "Какой-то другой день."

В этом примере функция get_message принимает название дня недели и возвращает соответствующее сообщение. Конструкция match проверяет значение переменной day на соответствие образцам “понедельник” и “пятница”. Если совпадение найдено, возвращается соответствующее сообщение. В противном случае выполняется блок _, который возвращает “Какой-то другой день.”.

2. Сопоставление с переменными

def calculate_area(shape):
    match shape:
        case {"тип": "квадрат", "сторона": side}:
            return side * side
        case {"тип": "прямоугольник", "ширина": width, "высота": height}:
            return width * height
        case _:
            return "Неизвестный тип фигуры"

print(calculate_area({"тип": "квадрат", "сторона": 5})) # Выведет: 25
print(calculate_area({"тип": "прямоугольник", "ширина": 4, "высота": 3})) # Выведет: 12
print(calculate_area({"тип": "круг", "радиус": 2})) # Выведет: "Неизвестный тип фигуры"

В этом примере функция calculate_area принимает словарь, описывающий геометрическую фигуру. Конструкция match сопоставляет значение переменной shape с образцами, задающими тип фигуры и ее параметры. Если совпадение найдено, выполняется соответствующий код для вычисления площади. В противном случае выполняется блок _, который возвращает сообщение “Неизвестный тип фигуры.”.

3. Сопоставление с последовательностями

def check_status(status):
    match status:
        case [200, 201]:
            return "Успешный запрос"
        case [400, 401, 403]:
            return "Ошибка запроса"
        case [500, 502, 503]:
            return "Ошибка сервера"
        case _:
            return "Неизвестный статус"

print(check_status([200])) # Выведет: "Успешный запрос"
print(check_status([401])) # Выведет: "Ошибка запроса"
print(check_status([502])) # Выведет: "Ошибка сервера"
print(check_status([418])) # Выведет: "Неизвестный статус"

В этом примере функция check_status принимает код HTTP статуса и возвращает сообщение о статусе запроса. Конструкция match сопоставляет значение переменной status с образцами, представляющими группы HTTP кодов статусов. Если совпадение найдено, выполняется соответствующий код для возврата сообщения. В противном случае выполняется блок _, который возвращает сообщение “Неизвестный статус.”.

4. Использование as для присваивания значений

def get_user_data(data):
    match data:
        case {"name": name, "age": age}:
            return f"Имя: {name}, возраст: {age}"
        case {"username": username, "email": email}:
            return f"Имя пользователя: {username}, email: {email}"
        case _:
            return "Некорректные данные"

user_data = {"name": "Иван", "age": 30}
print(get_user_data(user_data)) # Выведет: "Имя: Иван, возраст: 30"

В этом примере функция get_user_data принимает словарь, описывающий данные пользователя. Конструкция match сопоставляет значение переменной data с образцами, задающими структуру данных пользователя. Ключевое слово as используется для присваивания значений переменных nameageusername и email, которые соответствуют образцу. Если совпадение найдено, возвращается строка, содержащая данные пользователя. В противном случае выполняется блок _, который возвращает сообщение “Некорректные данные.”.

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

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

Никанор
Вопрос задан8 июля 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.