def volpiano_characters(*groups):
    """Returns accepted Volpiano characters

    The characters are organized in several groups: bars, clefs, liquescents,
    naturals, notes, flats, spaces and others. You can pass these group
    names as optional arguments to return only those subsets:

    >>> volpiano_characters()
    '3456712()ABCDEFGHJKLMNOPQRSIWXYZ89abcdefghjklmnopqrsiwxyz.,-[]{¶'
    >>> volpiano_characters('naturals', 'flats')
    'IWXYZiwxyz'

    Parameters
    ----------
    *groups : [str]
        The groups to include: 'bars', 'clefs', 'liquescents', 'naturals', 
        'notes', 'flats', 'spaces' or 'others'

    Returns
    -------
    str
       A string with accepted Volpiano characters
    """
    symbols = {
        'bars': '34567',
        'clefs': '12',
        'liquescents': '()ABCDEFGHJKLMNOPQRS',
        'naturals': 'IWXYZ',
        'notes': '89abcdefghjklmnopqrs',
        'flats': 'iwxyz',
        'spaces': '.,-',
        'others': "[]{¶",
    }
    if not groups:
        groups = symbols.keys()
    return "".join((symbols[key] for key in groups))