def is_iterable(an_object, include_strings=False):
    """Return True if an object is iterable, False otherwise.

    Iterable types include lists, tuples, dicts, strings, numpy arrays, etc.

    If include_strings is False, then strings are not considered iterable. This is useful because
    often we use is_iterable() to decide whether something is an object or a list of objects, and
    while one *can* loop over the contents of a string with 'for character in some_string', one
    doesn't typically want to.
    """
    try:
        iter(an_object)
        rc = True
    except TypeError:
        rc = False

    if rc and (not include_strings) and isinstance(an_object, str):
        rc = False

    return rc