Generate an underscore-separated lower-case identifier, given English text,
    a prefix, and an optional suffix.

    Useful for function names and variable names.

    `prefix` can be set to `''`, though be careful - without a prefix, the
    function will throw `InvalidIdentifier` when your string starts with a
    number.

    Example:
        >>> lower_underscore("This is an identifier", prefix='')
        'this_is_an_identifier'

def lower_underscore(string, prefix='', suffix=''):
    """
    Generate an underscore-separated lower-case identifier, given English text,
    a prefix, and an optional suffix.

    Useful for function names and variable names.

    `prefix` can be set to `''`, though be careful - without a prefix, the
    function will throw `InvalidIdentifier` when your string starts with a
    number.

    Example:
        >>> lower_underscore("This is an identifier", prefix='')
        'this_is_an_identifier'
    """

    return require_valid(append_underscore_if_keyword('_'.join(
        word.lower()
        for word in en.words(' '.join([prefix, string, suffix])))
    ))