Captura el resultado de una función mágica de IPython

Estoy tratando de capturar el objeto resultante de la función mágica del portátil IPython. Específicamente %timeit

Así que el siguiente código …

 import time def say_hello(n): time.sleep(n) print "hello" t = %timeit say_hello(5) 

Imprime a stdout:

 1 loops, best of 3: 5 s per loop 

Sin embargo, me gustaría capturar el resultado de %timeit say_hello(5) en la variable t .

Un objeto resultante llamado TimeitResult es generado por %timeit , pero no puedo averiguar cómo acceder a él desde un Notebook.

Me gustaría una solución más limpia que tener que capturar manualmente la sys.stdout utilizando los trucos de sys.stdout (este código será parte de una presentación, así que estoy tratando de mantenerlo lo más directo posible). ¿Alguien tiene alguna idea?

En el archivo fuente al que está vinculado, la cadena de documentos muestra las opciones para ejecutar la función mágica de timeit; Uno de los cuales está devolviendo un resultado de objeto:

 -o: return a TimeitResult that can be stored in a variable to inspect the result in more details. 

Así que, si corres

 obj = %timeit -o somefunc() 

obj hará referencia al objeto de resultado que se devolvió (sugerencia: use la terminación de la pestaña en el objeto, que le mostrará los atributos que tiene).

Un ejemplo de consumir el resultado de TimeItResult:

 myarray = (3,2,1) sorttime = %timeit -n1 -r3 -o myarray.sort() print(sorttime.best) 

Busque aquí los otros atributos de TimeItResult: https://ipython.org/ipython-doc/2/api/generated/IPython.core.magics.execution.html