diff -r ea3b47035436 -r 4d3cd4895e86 sage/misc/sage_timeit.py
--- a/sage/misc/sage_timeit.py	Tue Jun 17 23:10:30 2008 -0700
+++ b/sage/misc/sage_timeit.py	Thu Jun 19 13:59:53 2008 -0700
@@ -6,13 +6,23 @@ command.
 command.
 
 AUTHOR:
-    -- William Stein, based on code copied from Fernand Perez's Ipython
+    -- William Stein, based on code by Fernando Perez included in Ipython
 """
 
 import timeit as timeit_, time, math, preparser, interpreter
 
-def sage_timeit(stmt, globals, preparse=None,
-                   number = 0, repeat = 3, precision = 3):
+class SageTimeitResult():
+    r"""
+    I represent the statistics of a timeit() command.  I print as a string so
+    that I can be easily returned to a user.
+    """
+    def __init__(self, stats):
+        self.stats = stats
+
+    def __repr__(self):
+        return "%d loops, best of %d: %.*g %s per loop" % self.stats
+
+def sage_timeit(stmt, globals, preparse=None, number = 0, repeat = 3, precision = 3):
     """
     INPUT:
         stmt -- a text string which may
@@ -36,7 +46,7 @@ def sage_timeit(stmt, globals, preparse=
     The input expression can contain newlines:
         sage: from sage.misc.sage_timeit import sage_timeit
         sage: sage_timeit("a = 2\nb=131\nfactor(a^b-1)", globals(), number=10)
-        '10 loops, best of 3: ... per loop'
+        10 loops, best of 3: ... per loop
     """
     number=int(number)
     repeat=int(repeat)
@@ -78,9 +88,5 @@ def sage_timeit(stmt, globals, preparse=
         order = min(-int(math.floor(math.log10(best)) // 3), 3)
     else:
         order = 3
-    return "%d loops, best of %d: %.*g %s per loop" % (number, repeat,
-                                                      precision,
-                                                      best * scaling[order],
-                                                      units[order])
-
-
+    stats = (number, repeat, precision, best * scaling[order], units[order])
+    return SageTimeitResult(stats)
