Этот приём я узнал лет пять назад.
Ага! Пять. На календарь посмотри, 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