code: def decorate(func, caller, extras=()):
      
      evaldict = dict(_call_=caller, _func_=func)
      es = ''
      for i, extra in enumerate(extras):
          ex = '_e%d_' % i
          evaldict[ex] = extra
          es += ex + ', '
      fun = FunctionMaker.create(
          func, "return _call_(_func_, %s%%(shortsignature)s)" % es,
          evaldict, __wrapped__=func)
      if hasattr(func, '__qualname__'):
          fun.__qualname__ = func.__qualname__
      return fun
docs: decorate(func, caller) decorates a function using a caller.