Найти в Дзене
Self Study

Создаем switch-case на Python

Введение В Python нет конструкции switch-case, как, например, в C++ или Java, поэтому когда возникает необходимость в её использовании, приходится писать цепочки if-elif-else. В данном примере приведена короткая цепочка if-elif-else, однако таких условий может быть значительно больше. В таком случае, можно имитировать поведение switch-case с помощью обычного словаря. Имитируем switch-case 1. Создаем словарь с условиями Для начала, создадим словарь, ключами которого будут являться наши условия, а значениями, соответственно, функции, выполняющиеся при совпадении с этими условиями. Заметьте, что мы не вызываем наши функции в самом словаре, а только передаем их. 2. Имитируем ветку default Как правило, у конструкции switch-case можно задать ветку, которая выполнится по умолчанию, если ни одно из условий не подошло. Кроме того, если мы сейчас попробуем обратиться к несуществующему ключу, то получим исключение KeyError. Для того чтобы избежать этого, можно воспользоваться методом get(), кот
Оглавление

Введение

В Python нет конструкции switch-case, как, например, в C++ или Java, поэтому когда возникает необходимость в её использовании, приходится писать цепочки if-elif-else.

Пример цепочки if-elif-else
Пример цепочки if-elif-else

В данном примере приведена короткая цепочка if-elif-else, однако таких условий может быть значительно больше. В таком случае, можно имитировать поведение switch-case с помощью обычного словаря.

Имитируем switch-case

1. Создаем словарь с условиями

Для начала, создадим словарь, ключами которого будут являться наши условия, а значениями, соответственно, функции, выполняющиеся при совпадении с этими условиями.

Словарь-имитатор условий
Словарь-имитатор условий

Заметьте, что мы не вызываем наши функции в самом словаре, а только передаем их.

2. Имитируем ветку default

Как правило, у конструкции switch-case можно задать ветку, которая выполнится по умолчанию, если ни одно из условий не подошло. Кроме того, если мы сейчас попробуем обратиться к несуществующему ключу, то получим исключение KeyError.

Для того чтобы избежать этого, можно воспользоваться методом get(), который, в случае отсутствуя ключа в словаре, вернет значение по умолчанию, например:

Значение по умолчанию: None
Значение по умолчанию: None

Здесь, значением по умолчанию мы указали None, поэтому, если condition не совпадет ни с одним из наших ключей-условий, то будет возвращено None.

3. Последний штрих

Заключительным штрихом является вызов функции, которую мы получим, если condition совпадет с одним из условий. Для этого нужно просто добавить скобки ( ) к последнему рисунку. Приведем конечный результат:

-5

Вы также можете не создавать отдельную переменную для словаря, если он достаточно мал и вам не нужно часто к нему обращаться. В этом случае, можете воспользоваться такой конструкцией:

-6

Источники

1. Дэн Бейдер. "Чистый Python. Тонкости программирования для профи", С. 248 - 253