r"""
    Like range but returns characters

    Args:
        start (None): (default = None)
        stop (None): (default = None)
        step (None): (default = None)

    Kwargs:
        base (str): charater to start with (default='a')

    Returns:
        list: list of characters

    CommandLine:
        python -m utool.util_str --exec-chr_range

    Example:
        >>> # ENABLE_DOCTEST
        >>> from utool.util_str import *  # NOQA
        >>> import utool as ut
        >>> args = (5,)
        >>> result = ut.repr2(chr_range(2, base='a'))
        >>> print(chr_range(0, 5))
        >>> print(chr_range(0, 50))
        >>> print(chr_range(0, 5, 2))
        >>> print(result)
        ['a', 'b']

def chr_range(*args, **kw):
    r"""
    Like range but returns characters

    Args:
        start (None): (default = None)
        stop (None): (default = None)
        step (None): (default = None)

    Kwargs:
        base (str): charater to start with (default='a')

    Returns:
        list: list of characters

    CommandLine:
        python -m utool.util_str --exec-chr_range

    Example:
        >>> # ENABLE_DOCTEST
        >>> from utool.util_str import *  # NOQA
        >>> import utool as ut
        >>> args = (5,)
        >>> result = ut.repr2(chr_range(2, base='a'))
        >>> print(chr_range(0, 5))
        >>> print(chr_range(0, 50))
        >>> print(chr_range(0, 5, 2))
        >>> print(result)
        ['a', 'b']
    """
    if len(args) == 1:
        stop, = args
        start, step = 0, 1
    elif len(args) == 2:
        start, stop = args
        step = 1
    elif len(args) == 3:
        start, stop, step = args
    else:
        raise ValueError('incorrect args')

    chr_ = six.unichr

    base = ord(kw.get('base', 'a'))
    if isinstance(start, int):
        start = base + start
    if isinstance(stop, int):
        stop = base + stop

    if isinstance(start, six.string_types):
        start = ord(start)
    if isinstance(stop, six.string_types):
        stop = ord(stop)
    if step is None:
        step = 1
    list_ = list(map(six.text_type, map(chr_, range(start, stop, step))))
    return list_