code: def parse_argspec(callable_):
          
          args, varargs, keywords, defaults = getargspec(callable_)
          defaults = list(defaults or [])
  
          if getattr(callable_, '__self__', None) is not None:
              # This is a bound method, drop the self param.
              args = args[1:]
  
          first_default = len(args) - len(defaults)
          return Argspec(
              [Argument(arg, Argument.no_default
                        if n < first_default else defaults[n - first_default])
               for n, arg in enumerate(args)],
              varargs,
              keywords,
          )
docs: Takes a callable and returns a tuple with the list of Argument objects,
          the name of *args, and the name of **kwargs.
          If *args or **kwargs is not present, it will be None.
          This returns a namedtuple called Argspec that has three fields named:
          args, starargs, and kwargs.