def cast_int_float_string(value):
    """ Cast given string value, if possible, to an int, float or returns unchanged.

    Parameters
    ----------
    value : str or unicode
        Value to try casting to an int and float.

    Returns
    -------
    int, float, str or unicode
        Cast *value*.
    """

    try:
        return int(value)

    except ValueError:

        try:
            return float(value)

        except ValueError:
            return value