fortissimus23
@fortissimus23

Как преобразовать строку в функцию?

Есть функция:
def next(message):
  bot.send_message(message.from_user.id,'№' + str(message.text),reply_markup = back_btn_reply_markup)


Как вместо next просто использовать callback_data.data (для вызова функции next)?
@bot.callback_query_handler(func=lambda c: True)
def callback_inline(callback_data):
if callback_data.data == 'next':
        user_last_message = user_last_messages[callback_data.from_user.id]
        user_last_message.text = str(int(user_last_message.text) + 1)
        bot_sent_message = next(user_last_message)
  • Вопрос задан
  • 2292 просмотра
Решения вопроса 1
@MechanicZelenyy
То что вы хотите выглядит так:
eval("{}(user_last_message)".format(callback_data.data))


Однако никогда так не делайте, это гигантская дыра в безопасности.

Если все рано хочется, то вы можете воспользоваться тем что в питоне все является объектом и вы можете через специальные методы вызвать функцию как атрибут модуля.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Если функция next определена в том же модуле, где callback_inline, то

globals()[callback_data.data](user_last_message)

Если в импортированном модуле, например с именем example, то

getattr(example, callback_data.data)(user_last_message)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы