code: def map(self, func, *columns):
          
          if not columns:
              return map(func, self.rows)
          else:
              values = (self.values(column) for column in columns)
              result = [map(func, v) for v in values]
              if len(columns) == 1:
                  return result[0]
              else:
                  return result
docs: Map a function to rows, or to given columns