Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 20, 2014 18:17:26

A13x4nder
Зарегистрирован: 2014-06-20
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Задача с декораторами метода

Нужно написать декоратор для двухуровневого кэширования результатов выполнения методов. Таким образом, при повторном вызове метода с теми же параметрами метод не должен выполняться, а результат должен возвращаться декоратором из кэша. Первый уровень кэша - в памяти, второй - в sqlite. Реализовать возможность параметром декоратора задавать максимальный размер кэша (число кэшированных результатов) в памяти.

@cache(max_memory=1000)
def func(arg1, arg2):
    return arg1+arg2

Сейчас я застопорился на том, как передать аргументы (этот самый max_memory) декоратору. Подскажите пример кода.
И, вообще, буду очень благодарен за мысли по решению задачи.

Отредактировано A13x4nder (Июнь 20, 2014 18:23:16)

Офлайн

#2 Июнь 20, 2014 19:12:51

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Задача с декораторами метода

Уровень вопросов не соответствует уровню пролемы.
Работа с дерокаторами разжевана здесь неоднократно. На всяий случай нужно узнать как кэширует sqlite, если она вообще этим занимается, дальше pickle.

Офлайн

#3 Июнь 20, 2014 19:30:23

A13x4nder
Зарегистрирован: 2014-06-20
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Задача с декораторами метода

Shaman
Уровень вопросов не соответствует уровню пролемы.Работа с дерокаторами разжевана здесь неоднократно. На всяий случай нужно узнать как кэширует sqlite, если она вообще этим занимается, дальше pickle.
Насчет декораторов мне конкретный частный случай не ясен. Когда нужно передать атрибут декоратору функции - понятно, методу - никак не выходит. Вот и спрашиваю, есть ли у кого пример кода.
Про pickle спасибо! А то я неверно понял задачу. Решил, что имеется в виду память оперативная и сохранение в переменной.

Офлайн

#4 Июнь 20, 2014 19:40:57

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Задача с декораторами метода

def increment(i):
    def decorator(func):
        def wrapper(*args, **kw):
            return func(*args, **kw) + i
        return wrapper
    return decorator
@increment(10)
def foo(x):
    return x ** 2
print (foo (8))



Офлайн

#5 Июнь 20, 2014 19:43:10

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9879
Репутация: +  853  -
Профиль   Отправить e-mail  

Задача с декораторами метода

>>> class A:
...     def dd(m=None):
...         def d(f):
...             def g(*args):
...                 print(m)
...                 return f(*args)
...             return g
...         return d
...     
...     @dd(10)
...     def f1(self, arg1, arg2):
...         return arg1 + arg2
...     
...     @dd(20)
...     def f2(self, arg1, arg2):
...         return arg1 * arg2
... 
>>> a = A()
>>> a.f1(1, 2)
10
3
>>> a.f2(3, 4)
20
12
>>>



Отредактировано py.user.next (Июнь 20, 2014 19:45:43)

Офлайн

#6 Июнь 20, 2014 19:46:45

A13x4nder
Зарегистрирован: 2014-06-20
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Задача с декораторами метода

FishHook, спасибо!!! Буду двигаться дальше!!!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version