code: def memoize(fnc):
      
      cache = dict()
  
      @functools.wraps(fnc)
      def wrapped(*args, **kwargs):
          """Decorated one"""
          key = repr(args) + repr(kwargs)
          if key not in cache:
              cache[key] = fnc(*args, **kwargs)
  
          return cache[key]
  
      return wrapped
docs: memoization function.
  
      >>> import random
      >>> imax = 100
      >>> def fnc1(arg=True):
      ...     return arg and random.choice((True, False))
      >>> fnc2 = memoize(fnc1)
      >>> (ret1, ret2) = (fnc1(), fnc2())
      >>> assert any(fnc1() != ret1 for i in range(imax))
      >>> assert all(fnc2() == ret2 for i in range(imax))