Рубрики
Без рубрики

Как обрабатывать случай переключения в Python.

Короткий фрагмент, чтобы более эффективно справляться с требованиями к регистру переключения в python.

Автор оригинала: 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 .

Скриншот с 2018-11-22 15-34-05.png

Таким образом, случаи переключения требуют некоторого значения по умолчанию, которое будет использоваться, если какой-либо из случаев переключения не соответствует. Один из способов преодолеть это-вызвать словарь с помощью метода .get .

.метод get позволяет указать значение по умолчанию. Это значение по умолчанию будет использоваться при возникновении ошибки ключа.

Код ниже мы изменили функцию get_car_color :

def get_car_color(car):
  return car_name_and_colors.get(car, 'pink')

Таким образом, вот как мы можем написать более чистый и читаемый обходной путь в случае переключения, если последовательность “if..elif..elif..else” становится слишком длинной.

Надеюсь, вам понравилась эта статья