On 21Feb2017 22:44, alfredocabre...@gmail.com <alfredocabre...@gmail.com> wrote:
I have a python function and a decorator that works just fine.

def fun_cache(function):
   memo = {}
   def wrapper(*args):
       if args in memo:
           return memo[args]
       else:
           rv = function(*args)
           memo[args] = rv
           return rv
   return wrapper


@fun_cache
def fib(n):
   if (n < 2): return 1
   else: return fib(n-1) + fib(n-2)

assert(fib(0) == 1)
assert(fib(3) == 3)
assert(fib(6) == 13)
assert(fib(10) == 89)
assert(fib(30) == 1346269)
assert(fib(100) == 573147844013817084101)
assert(fib(400) == 
284812298108489611757988937681460995615380088782304890986477195645969271404032323901)


Now I will like to call the @fun_cache decorator like this :

@fun_cache(cache={})

Any help?

You need to write "fun_cache" as a function accepting a cache argument, and returning a decorator that uses that cache.

Like:

   def fun_cache(cache):
       def fun_cache_decorator(function):
           def wrapper(*args):
               ... save things in cache instead of memo ...
           return wrapper
       return fun_cache_decorator

Cheers,
Cameron Simpson <c...@zip.com.au>
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to