Как обрабатывать регистр переключателей в 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
.
Таким образом, для случаев переключения требуется некоторое значение по умолчанию, которое будет использоваться, если какой-либо из случаев переключения не соответствует. Один из способов преодолеть это — вызвать словарь, используя .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» становится слишком длинной.
Надеюсь, вам понравилась эта статья