there is a decorator, there is a function in it, as part of this function, there is a special value generator that writes them into an array, and this array must be passed to another decorator to get values ​​from it ..

... # при старте бота, запускается каманда '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() ... 

ps goal to get strings in random order from the database without repeating

  • 2
    1 - add your code to the question so that the respondents do not have to reinvent what you described in words. 2 - what problem are you trying to solve? Almost sure that you are using inappropriate tools. - insolor

1 answer 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}

From the dec1 decorator, we call the dec2 decorator. New values ​​in dec2 can be passed via args / kwargs / num