Какой способ лучше использовать в хендлерах pyTelegramBotAPI?

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

@bot.message_handler()
def hi(message):
    if message.text.lower() == 'привет':
        bot.send_message(message.chat.id, 'Привет!')

Можно сделать по другому и все будет также работать:

@bot.message_handler(func = lambda message: message.text.lower() == 'привет')
def hi(message):
    bot.send_message(message.chat.id, 'Привет!')

Оба способа работают, но какой из них более правильный и рациональный?


Ответы (1 шт):

Автор решения: oleksandrigo

ИМХО.

Собственно, первый вариант имеет смысл когда два разных условия требуют выполнение одного кода по началу или концу и вместо того чтобы делать 2 хендлера ты делаеш один но перед/после/в_какой-то_другой_момент выполняешь определенный код, (к примеру запись в БД нового юзера) а после проверяешь на условие по тексту.

Второй вариант лучше для понимания (опять же ИМХО), каждая функция делает свою работу, и вам не нужно показывать весь код ваших ифов при условии что словите багу и побежите сюда искать ответ (хотя скорее всего придется).
Также не забывайте про порядок выполнение хендлеров, если вы запихаете все в один хендлер, то есть вероятность что вы запутаетесь(впрочем можно и наоборот). Пустые хендлеры в целом не очень хорошая практика, обычно их кидают в конец кода если они вообще есть.

→ Ссылка