code: def get_functarguments(func):
      argspec = inspect.getargspec(func)
      if argspec.defaults is not None:
          args = argspec.args[:-len(argspec.defaults)]
          kwargs = dict(
              zip(argspec.args[-len(argspec.defaults):], argspec.defaults))
      else:
          args = argspec.args
          kwargs = {}
      if args and args[0] == 'self':
          args.pop(0)
      func.__named__ = []
      arguments = []
      shared = get_shared(func)
      for arg in args:
          if has_shared(arg, shared) is not False:
              continue
          if has_argument(arg, func.__cls__) is not False:
              continue
          arguments.append(([arg], {}, ))
          func.__named__.append(arg)
      for key, val in kwargs.items():
          if has_shared(key, shared) is not False:
              continue
          if has_argument(key, func.__cls__) is not False:
              continue
          if isinstance(val, dict):
              flags = [val.pop('lflag', '--%s' % key)]
              short = val.pop('flag', None)
              dest = val.get('dest', key).replace('-', '_')
              if short:
                  flags.insert(0, short)
          else:
              flags = ['--%s' % key]
              val = dict(default=val)
              dest = key.replace('-', '_')
          func.__named__.append(dest)
          arguments.append((flags, val, ))
      return arguments