def expose_values(labels, values, use_repr=False, to_stdout=True):
    """
    Given a (zippable) list or one string for each of args labels and values,
    prints or returns them for nice interactive data manipulation/debugging.

    Args:
        labels: string or list of strings
                just used to identify values
        values: expressions
        use_repr: boolean; if True, will apply repr() to each value
        to_stdout: boolean; if True, prints result; if False, returns list
                   of 2-tuples

    Returns:
        list of 2-tuples or None, according to ``to_stdout``.

    :todo: is use_repr ever useful?
    """
    if type(labels) != list:
        labels = [labels]
        values = [values]
    assert len(labels) == len(values)
    result = []
    for label, value in zip(labels, values):
        if use_repr:
            result.append((label, repr(value)))
        else:
            result.append((label, value))
    if to_stdout:
        for item in result:
            print('{}: {}'.format(item[0], item[1]))
    else:
        return result
