Python, в отличие от некоторых других языков программирования, не включал традиционное выражение switch case до версии 3.10. В этом руководстве мы рассмотрим, как работает эквивалент switch case в Python и как его можно реализовать с использованием функции структурного сопоставления шаблонов в Python.
Понимание традиционных выражений Switch Case
До версии Python 3.10 разработчикам Python приходилось использовать множество выражений if-elif-else или словарей, чтобы имитировать функциональность switch case. Вот основной пример с использованием if-elif-else:
day = input("Enter the day of the week: ").capitalize() if day == "Saturday" or day == "Sunday": print(f"{day} is a weekend.") elif day in ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]: print(f"{day} is a weekday.") else: print("That's not a valid day of the week.")
Saturday is a weekend.
Введение Match и Case в Python 3.10
С выходом Python 3.10 были введены выражения match и ключевые слова case, предлагая более элегантное решение, аналогичное традиционным выражениям switch case в других языках.
Понимание базового синтаксиса
Рассмотрим сценарий, где мы хотим категоризировать дни недели на выходные или будние дни, а также определить конкретный день. Вот как мы можем использовать выражение match:
day = input("Enter the day of the week: ").capitalize() match day: case "Saturday" | "Sunday": print(f"{day} is a weekend.") case "Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday": print(f"{day} is a weekday.") case _: print("That's not a valid day of the week.")
Monday is a weekday.
- Ввод пользователя и метод
capitalize()
: Мы начинаем с получения ввода пользователя для дня недели и используем методcapitalize()
, чтобы правильно его форматировать (первая буква заглавная, остальные строчные). - Использование выражения
match
: Затем мы используемmatch
для оценки переменной day. - and so on.
Пример трансляции:
Сопоставление шаблонов с помощью
case
:- Первый
case
проверяет, является ли ввод “Суббота” или “Воскресенье”. Символ “|”, известный как оператор побитового ИЛИ, используется для сопоставления любого из нескольких шаблонов. Если ввод является любым из них, он выводит, что день является выходным. - Второй case охватывает все будние дни, проверяя каждый из них. Если ввод совпадает с любым будним днём, он выводит, что день является будним.
- Первый
- Альтернативный Case (
_
): Последний case действует как значение по умолчанию (`else` оператор), который ловит любой ввод, который не совпадает с известными днями, указывая на неверный ввод. - Отсутствие операторов break: Обратите внимание, что нам не нужно использовать
break
после каждого case. Python автоматически выходит из оператора сопоставления после успешного сопоставления.
Синтаксис match-case более читаем и ясен по сравнению с серией операторов if-elif-else.
Расширенные случаи использования Match и Case в Python
Приложения в области data science и т. д.
В Python оператор match-case может быть чрезвычайно полезен в задачах предварительной обработки данных в data science. Предобработка часто включает категоризацию данных в различные группы на основе специфических критериев.
Например, в наборе данных о животных вы можете хотеть их категоризировать на основе их класса, например, млекопитающие, птицы, рептилии и т.д. Вот упрощённый пример:
animal = "Eagle" match animal: case "Eagle" | "Parrot": print("Bird") case "Lion" | "Tiger": print("Mammal") case "Python" | "Crocodile": print("Reptile") case _: print("Unknown Class")
Bird
Этот подход упрощает сложную логику if-else и делает код более читаемым и поддерживаемым, особенно при работе с большими наборами данных с множеством категорий.
Сценарии машинного обучения
В машинном обучении важно обрабатывать различные типы входных данных. Структура match-case может использоваться для извлечения признаков или вывода модели. Например, в модели машинного обучения, предсказывающей погодные условия, match-case может использоваться для категоризации диапазонов температур в ‘Холодно’, ‘Тепло’, ‘Горячо’, что затем может быть использовано в качестве входных признаков для модели.
Общие ошибки и лучшие практики использования Python Switch Case
Советы по отладке
Обычная ошибка при использовании match-case в Python — забывание включить подчёркивание (_
) для случая по умолчанию, аналогичного ‘else’ в традиционных операторах if-else. Это может привести к непредвиденному поведению, если не будут совпадать никакие конкретные случаи. Всегда включайте случай по умолчанию для обработки неожиданных или различных значений.
Рассмотрение производительности
Хотя оператор match-case является мощным инструментом, следует учитывать его влияние на производительность кода Python, особенно в крупномасштабных приложениях. В сценариях с большим количеством случаев или сложным сопоставлением шаблонов производительность потенциально может пострадать. Профилирование и тестирование кода на производительность в реальных сценариях очень важно для понимания и смягчения любых потенциальных проблем с производительностью.
Python Match-Case против традиционного Switch-Case
Сравнительный анализ
Python match-case значительно отличается от традиционных операторов switch-case, встречающихся в таких языках, как Java или C++. В Java, например, оператор switch ограничен поиском только скалярных значений (например, целых чисел и типов перечислений), в то время как match-case в Python предлагает гораздо более гибкие возможности поиска шаблонов, позволяя находить сложные типы данных, такие как последовательности и экземпляры классов. Это делает реализацию Python более мощной, но также требует более глубокого понимания концепций сопоставления образцов.
Руководство по переходу
Для программистов, знакомых с традиционными операторами switch-case в таких языках, как C++ или Java, переход к match-case в Python требует изменения мышления от простого сопоставления значений к сопоставлению образцов.
Важно понимать, что match-case в Python – это не просто switch-case, а универсальный инструмент для деконструкции типов данных и извлечения информации из сложных структур. Практика с различными типами данных и шаблонами – ключ к освоению его использования.
Заключение
Переход Python к инструкциям match и case в версии 3.10 предоставляет долгождую функцию для разработчиков, знакомых с операторами switch case в других языках. Она предлагает чистый и ясный способ обработки множества условий, улучшая читаемость и поддерживаемость кода.
Вы можете узнать больше о Функциях Python в нашем полном руководстве и исследовать этот и другие концепты в нашем курсе Средний уровень Python.
Source:
https://www.datacamp.com/tutorial/python-switch-case