#python
есть декоратор, в нем функция , частью этой функции, есть специальной генератор значений, который записывает их в массив и этой массив нужно передать в другой декоратор для получения с него значений .. ... # при старте бота, запускается каманда 'start' @bot.message_handler(commands=['start']) def handle_text(message): markup = telebot.types.ReplyKeyboardMarkup(True) markup.row('I AM RANDOM') # Подключаемся к БД db_worker = SQLighter(config.database_name) # Получаем количество строк, формируем массив и перемешиваем его l = list(range(1, db_worker.count_rows() + 1)) # <<<<<<< random.shuffle(l) bot.send_message(message.from_user.id, 'Welcome', reply_markup=markup) # Отлавливаем нажатия на клавишу 'I AM RANDOM' @bot.message_handler(content_types=['text']) def game(message): if message.text == 'I AM RANDOM': # Подключаемся к БД db_worker = SQLighter(config.database_name) # Получаем случайную строку из БД # массив заранее генерируемых чисел берем с функции декоратора row = db_worker.select_single(l[0]) # <<<<<<< markup = telebot.types.ReplyKeyboardMarkup(True) markup.row('I AM RANDOM') # Отправляем данные bot.send_message(message.chat.id, row[1] +'\n\n' + row[5], reply_markup=markup) db_worker.close() ... p.s. цель получить строки в рандомном порядке из БД без повторения
Ответы
Ответ 1
def dec1(fn): def wrap(*args, **kwargs): args = list(args) args[0] += 1 kwargs.update(ar=args[0] + 100) n = fn.__name__ res = dt[n] = dec2(num=222)(fn)(*args, **kwargs) return res return wrap def dec2(num=1): def dec_(fn): def wrap(*args, **kwargs): args = list(args) args[0] = args[0] + kwargs.get('ar', 0) + num n = fn.__name__ res = dt[n] = fn(*args) return res return wrap return dec_ @dec1 def asd1(a): return a @dec2() def asd2(a): return a if __name__ == '__main__': dt = {} print(asd1(1)) print(asd2(1)) print(dt) 326 2 {'asd2': 2, 'asd1': 326} Из декоратора dec1 вызываем декоратор dec2 Новые значения в dec2 можно передать через args/kwargs/num
Комментариев нет:
Отправить комментарий