code: def _yield_abbreviations_for_parameter(param, kwargs):
      
      name = param.name
      kind = param.kind
      ann = param.annotation
      default = param.default
      not_found = (name, empty, empty)
      if kind in (Parameter.POSITIONAL_OR_KEYWORD, Parameter.KEYWORD_ONLY):
          if name in kwargs:
              value = kwargs.pop(name)
          elif ann is not empty:
              warn("Using function annotations to implicitly specify interactive controls is deprecated. Use an explicit keyword argument for the parameter instead.", DeprecationWarning)
              value = ann
          elif default is not empty:
              value = default
          else:
              yield not_found
          yield (name, value, default)
      elif kind == Parameter.VAR_KEYWORD:
          # In this case name=kwargs and we yield the items in kwargs with their keys.
          for k, v in kwargs.copy().items():
              kwargs.pop(k)
              yield k, v, empty
docs: Get an abbreviation for a function parameter.