@timur102

Как вызвать тут функцию, которую напишет пользователь?

У меня есть набор функций:
def gray(self):
    draw = ImageDraw.Draw(self.image)
    ...
    return out

def sepia(self):
    draw = ImageDraw.Draw(self.image)
    ...
    return out
def negative(self):
   draw = ImageDraw.Draw(self.image)
    ...
    return out

И в каждой из этих функций повторяется конец и начало. Я придерживаюсь DRY (dont repeat yourself).
1)Как можно сократить код?
2) Еще у меня странная проверка:
@bot.message_handler(content_types=['photo'])
def handle_docs_photo(message):
	try:
		chat_id = message.chat.id
		file_info = bot.get_file(message.photo[-1].file_id)
		r = bot.download_file(file_info.file_path)
		img = handler.ImageHandler(r)
		if users[chat_id] == "gray":out = img.gray()
		if users[chat_id] == "sepia":out = img.sepia()
		if users[chat_id] == "negative":out = img.negative()
		if users[chat_id] == "uproar":out = img.uproar()
		if users[chat_id] == "mono":out = img.mono()
		bot.send_chat_action(chat_id, 'upload_photo')
		bot.send_photo(chat_id, out)
		del out
	except Exception as e:
		bot.reply_to(message,e)

Как не повторяться?
  • Вопрос задан
  • 104 просмотра
Решения вопроса 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Использовать декоратор.
Ответ написан
Комментировать
NeiroNx
@NeiroNx
Программист
handlers ={
    "gray": img.gray,
    "sepia":img.sepia,
    "negative":img.negative,
    "uproar":img.uproar,
    "mono"img.mono,}
if(users[chat_id] in handlers.keys()): out = handlers[users[chat_id]]()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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