This function allows a simple a way to iterate over a "complex" iterable, for example,
    if the input [12, [23], (4, 3), "lkjasddf"], this will return an Iterable that returns
    12, 23, 4, 3 and "lkjasddf".

    Args:
        iterable (Iterable) - A complex iterable that will be flattened

    Returns:
        (Iterable): An Iterable that flattens multiple interables

def flatten(iterable):
    '''This function allows a simple a way to iterate over a "complex" iterable, for example,
    if the input [12, [23], (4, 3), "lkjasddf"], this will return an Iterable that returns
    12, 23, 4, 3 and "lkjasddf".

    Args:
        iterable (Iterable) - A complex iterable that will be flattened

    Returns:
        (Iterable): An Iterable that flattens multiple interables'''
    return itertools.chain.from_iterable(a if isinstance(a,Iterable) and not isinstance(a, str) else [a] for a in iterable)