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

Как и многие другие языки программирования, Python не поддерживает конструкция корпуса переключателя.

Официальная документация говорит, что вы можете добиться того же с помощью последовательности «if….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.

Скриншот от 22.11.2018 15-34-05.png

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

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

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

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

Итак, вот как мы можем написать более чистый и читаемый обходной путь переключения регистра, если последовательность «if..elif..elif..else» становится слишком длинной.

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

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *