def ipluck(dicts, key, *args, **kwargs):
    """Plucks values for a given key from a series of dictionaries as an iterator.

  :param dicts:
      Iterable sequence of dictionaries.
  :param key:
      The key to fetch.
  :param default:
      The default value to use when a key is not found. If this value is
      not specified, a KeyError will be raised when a key is not found.
  :yields:
      Iterator of values for the key.
  """
    if args or kwargs:
        default = kwargs['default'] if kwargs else args[0]

        def _get_value_from_dict(dictionary):
            """Obtains a value from the dictionary for the given key."""
            return dictionary.get(key, default)
    else:
        _get_value_from_dict = lambda w: w[key]
    return map(_get_value_from_dict, dicts)
