def _deep_map(func, *args):
    """Like map, but recursively enters iterables

    Ex:

        >>> _deep_map(lambda a, b: a + b,
                      (1, 2, (3, (4,), 5)),
                      (10, 20, (30, (40,), 50)))
        [11, 22, [33, [44], 55]]

    """
    try:
        return [_deep_map(func, *z) for z in zip(*args)]
    except TypeError:
        return func(*args)