TGViewer
Cool and Fun Python Cool and Fun Python @python3k · 510 subscribers
Post #141 381
Альтернатива if-elif-else / match-case из далёкого прошлого

Этот приём я узнал лет пять назад.

Ага! Пять. На календарь посмотри, star-пёр. 2026 на дворе. Ты этот приём узнал лет 15-20 назад. 🤓

Итак, есть большой, просто огромный if.
if data == "one":
# много строк кода
...
elif data == "two":
# ещё больше строк кода
...
elif data = "three"
# кода меньше не становится
...
else:
# тут не очень много кода, строк 15-20
...


Что делать, когда один if-elif-else занимает сотни строк кода? 🤔
Самый простой и логичный вариант - перенести логику в функции.
def func_one():
# много строк кода, но в отдельной функции
...


def func_two():
# ещё больше строк кода, но в функции не так страшно
...


def func_three():
# кода меньше не становится, но визуально он разбит на более мелки блоки
...


def func_else():
# тут не очень много кода
...


if data == "one":
func_one()
elif data == "two":
func_two()
elif data == "three"
func_three()
else:
func_else()


Как видите, код поделился на отдельные блоки-функции, а полотно if-elif-else стало компактным.

Эй! Хватит полотен. Переходи к своему секретному приёму. 🤓

Итак, секрет в словаре.
Ключ - значение, с которым сравниваем data.
Значение - функция-обработчик. И конечно же функцию в словарь передаём, а не вызываем.
def func_one():
...


def func_two():
...


def func_three():
...


def func_else():
...


funcs = {
"one": func_one,
"two": func_two,
"three": func_three,
}

func = funcs.get(data, func_else)
func()


Теперь мы совершенно избавились от if-elif-else. Вместо него словарь funcs со всеми вариантами ветлвелния.
Вместо вызова у нас метод .get(data). В него же помещаем ветку else.

Кстати, две последние строки можно записать в одну, вот так:
funcs.get(data, func_else)()


✍️ - беру на вооружение
🤯 - как это работает?
🎄- неужели праздники всё?

#python3k #lifehack
Python3k
  • ✍ 13
  • 🎄 9
  • 🤯 6
More from @python3k
  1. Feb 25, 2026Магические числа Нравится волшебство? А вот и зря. Магические числа - антипаттерн в програ…
  2. Feb 9, 2026Про ОС Оказывается мысли о том, что у программиста должен быть MacBook, а код надо писать…
  3. Feb 1, 2026Кто-нибудь пользовался новой удалённой отладкой в Python 3.14? Поделитесь своим опытом в к…
  4. Jan 25, 2026Redis хорош, но... Ничего не имею против хранения данный в ОЗУ при помощи Redis. Быстрый д…
  5. Jan 20, 2026В продолжение идеи про словарь функций Начало тут def handle_negative(): print("Обработка…
  6. Jan 5, 2026Post #140
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →