def mapped_repr(obj: Any, attributes: List[Tuple[str, str]],
                with_addr: bool = False, joiner: str = COMMA_SPACE) -> str:
    """
    Convenience function for :func:`__repr__`.
    Takes attribute names and corresponding initialization parameter names
    (parameters to :func:`__init__`).

    Args:
        obj: object to display
        attributes: list of tuples, each ``(attr_name, init_param_name)``.
        with_addr: include the memory address of ``obj``
        joiner: string with which to join the elements

    Returns:
        string: :func:`repr`-style representation

    """
    elements = ["{}={}".format(init_param_name, repr(getattr(obj, attr_name)))
                for attr_name, init_param_name in attributes]
    return repr_result(obj, elements, with_addr=with_addr, joiner=joiner)