Автор оригинала: Kishan S Mehta.
Как и многие другие языки программирования, python не поддерживает конструкцию switch case .
Официальная документация говорит, что вы можете добиться того же самого с последовательностью “если…elif…elif … else”. Однако это может привести к довольно грязному коду, если практика. Давайте рассмотрим пример ниже:
def get_car_color(car): if car == 'ford': return ['red', 'black', 'white', 'silver', 'gold'] elif car == 'audi': return ['black', 'white'] elif car == 'volkswagen': return ['purple', 'orange', 'green'] elif car == 'mercedes': return ['black'] else: return ['pink']
Приятно видеть нашу маленькую функцию get_car_color
. Теперь, скажем, через каждые несколько дней босс говорит, чтобы добавить поддержку новых автомобильных компаний в нашу функцию. Из-за этого мы должны обновить нашу функцию и добавить больше последовательностей “elif…elif..”.
По мере того, как мы добавим больше автомобилей в нашу функцию, код станет громоздким и не будет питоническим.
Вместо написания нескольких последовательностей “…elif…” мы можем использовать словарь, хранящий название автомобиля и поддерживаемые цвета. Давайте рассмотрим пример ниже:
car_name_and_colors = { 'ford': ['red', 'black', 'white', 'silver', 'gold'], 'audi': ['black', 'white'], 'volkswagon': ['purple', 'orange', 'green'], 'mercedes': ['black'], } def get_car_color(car): return car_name_and_colors[car]
Это сделало наш код небольшим и легким для чтения и обслуживания. Но есть еще одна проблема. Если вы попытаетесь вызвать get_car_color
с брендом, которого нет в нашем словаре, метод выдаст KeyError
.
Таким образом, случаи переключения требуют некоторого значения по умолчанию, которое будет использоваться, если какой-либо из случаев переключения не соответствует. Один из способов преодолеть это-вызвать словарь с помощью метода .get
.
.метод get
позволяет указать значение по умолчанию. Это значение по умолчанию будет использоваться при возникновении ошибки ключа.
Код ниже мы изменили функцию get_car_color
:
def get_car_color(car): return car_name_and_colors.get(car, 'pink')
Таким образом, вот как мы можем написать более чистый и читаемый обходной путь в случае переключения, если последовательность “if..elif..elif..else” становится слишком длинной.
Надеюсь, вам понравилась эта статья