Подстановка названий параметров / функций в python
Пишу бота на aiogram, часто появляется необходимость выборки нужной функции, которая будет что-либо делать к примеру отправлять сообщение или отвечать за его изменение.
Для примера:
botMessage = await botSender.send_photo(
chat_id=userMessage.chat.id,
photo='https://',
caption=message_text,
reply_markup=keyboard,
parse_mode='MarkdownV2'
)
Как вы могли уже заметить этот код на отлично подходит для отправки фото, кнопок и текста, но а что если я хочу в одной и той же функции изменить кнопки или текст или даже фото, чтобы не писать:
botMessage = await botSender.edit_photo(
chat_id=userMessage.chat.id,
photo='https://',
caption=message_text,
reply_markup=keyboard,
parse_mode='MarkdownV2'
)
Есть ли некая возможность передавать параметр при помощи кода в python? Пример желаемого:
action = 1
call_ = {1: 'send_photo', 2: 'edit_photo'}[action]
botMessage = await botSender.call_(
chat_id=userMessage.chat.id,
photo='https://',
caption=message_text,
reply_markup=keyboard,
parse_mode='MarkdownV2'
)
В этом примере как вы уже могли догадаться отправилась бы фотография, но не изменилась, если бы я в переменную присвоил 2, тогда фотография была бы изменена на другую.
Какие способы существуют реализовать это? И могли бы оставить пример к своему ответу.
Ответы (1 шт):
В питоне все объекты можно присвоить в переменные, в т.ч. имена функций. Поэтому вроде бы так должно работать:
action = 1
call_ = {1: botSender.send_photo, 2: botSender.edit_photo}[action]
botMessage = await call_(
chat_id=userMessage.chat.id,
photo='https://',
caption=message_text,
reply_markup=keyboard,
parse_mode='MarkdownV2'
)
Т.е. мы присваиваем в переменную ссылку на функцию, а потом вызываем эту переменную как обычную функцию.