<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def row(values, width=WIDTH, format_spec=FMT, align=ALIGN, style=STYLE):
 """Returns a formatted row of data Parameters values : array_like An iterable array of data (numbers or strings), each value is printed in a separate column width : int The width of each column (Default: 11) format_spec : string The precision format string used to format numbers in the values array (Default: '5g') align : string The alignment to use ('left', 'center', or 'right'). (Default: 'right') style : namedtuple, optional A line formatting style Returns ------- rowstr : string A string consisting of the full row of data to print """

    tablestyle = STYLES[style]
    widths = parse_width(width, len(values))

    assert isinstance(format_spec, string_types) | isinstance(format_spec, list), \
        "format_spec must be a string or list of strings"

    if isinstance(format_spec, string_types):
        format_spec = [format_spec] * len(list(values))

    # mapping function for string formatting
    def mapdata(val):

        # unpack
        width, datum, prec = val

        if isinstance(datum, string_types):
            return ('{:%s%i}' % (ALIGNMENTS[align], width + ansi_len(datum))).format(datum)

        elif isinstance(datum, Number):
            return ('{:%s%i.%s}' % (ALIGNMENTS[align], width, prec)).format(datum)

        else:
            raise ValueError('Elements in the values array must be strings, ints, or floats')

    # string formatter
    data = map(mapdata, zip(widths, values, format_spec))

    # build the row string
    return format_line(data, tablestyle.row)