@TruthDanchik

Оптимально ли использовать ветку if elif else в callbacl query handler?

В коде бота создал асинхронную колбэк функцию.
Влияет ли на скорость работы кода количество веток if elif ..... else в функции?
Допустим если при помощи call.data я определю callbac моей кнопки и найду его в теле функции при помощи как раз таки условия if call.data == , elif call.data == .... (кнопок же много)
Просто уже написал огромную часть кода и сейчас распределять все call.data по отдельным функциям выглядит страшно и не особо притягивает. Но подумал об этом только сейчас. Что думаете, это сильно повлияет на работу бота при хорошем кол-ве пользователей? Или из за того что функция асинхронна и все действия соответственно в ней тоже это не играет роли и обычно распределяют всё же по функциям скорее для чистоты кода?
  • Вопрос задан
  • 63 просмотра
Решения вопроса 1
@Jack444
if/else довольно медленный и на мой взгляд его стоит использовать когда у нас есть раличные вычесляемыу условия, по типу:
if a < x+3: ...
elif b > x-a: ...
else: ...

То есть когда принципиально логика условия меняется то без if/else не обойтись но если в условии только сравнение то в разы производительней использовать match/case
match a:
    case 1: ...
    case 2: ...
    case _: ...

В вашем случае вообще можно упростить до словаря и это будет намного быстрее работать и при этом словарь будет сразу всю иерархию навигации отображать и держать его удобнее в другом файле
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
1. Можно указывать фильтр на call.data при регистрации callback
2. Если есть повторяющиеся действия - посмотри, нельзя ли использовать коллекцию (например, словарь, в котором лежат обработчики отдельных вариантов).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы