code: def dict_take(dict_, keys, default=util_const.NoParam):
      r
      if default is util_const.NoParam:
          for key in keys:
              yield dict_[key]
      else:
          for key in keys:
              yield dict_.get(key, default)
docs: r"""
      Generates values from a dictionary
  
      Args:
          dict_ (Mapping): a dictionary to take from
          keys (Iterable): the keys to take
          default (object, optional): if specified uses default if keys are missing
  
      CommandLine:
          python -m ubelt.util_dict dict_take_gen
  
      Example:
          >>> import ubelt as ub
          >>> dict_ = {1: 'a', 2: 'b', 3: 'c'}
          >>> keys = [1, 2, 3, 4, 5]
          >>> result = list(ub.dict_take(dict_, keys, None))
          >>> assert result == ['a', 'b', 'c', None, None]
  
      Example:
          >>> import ubelt as ub
          >>> dict_ = {1: 'a', 2: 'b', 3: 'c'}
          >>> keys = [1, 2, 3, 4, 5]
          >>> try:
          >>>     print(list(ub.dict_take(dict_, keys)))
          >>>     raise AssertionError('did not get key error')
          >>> except KeyError:
          >>>     print('correctly got key error')