#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
Комментариев нет:
Отправить комментарий