code: def row(values, width=WIDTH, format_spec=FMT, align=ALIGN, style=STYLE):
      
      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)
docs: 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