简体   繁体   中英

Capture the result of an IPython magic function

I'm trying to capture the resulting object of IPython Notebook magic function. Specifically %timeit

So the following code...

import time
def say_hello(n):
    time.sleep(n)
    print "hello"

t = %timeit say_hello(5)

Prints to stdout:

1 loops, best of 3: 5 s per loop

However, I'd like to capture the result of %timeit say_hello(5) in the variable t .

A resulting object called TimeitResult is generated by %timeit , but I can't figure out how to access it from within a Notebook.

I'd like a cleaner solution than having to manually capture stdout using sys.stdout tricks (this code will be part of a presentation so I'm trying to keep it as straight forward as possible). Anyone have any ideas?

In the source file you linked to, the docstring shows the options for running the timeit magic function; one of which is returning an object result:

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

So, if you run

obj = %timeit -o somefunc()

obj will reference the result object that was returned (hint: use tab completion on the object, that will show you the attributes it has).

An example of consuming the TimeItResult output:

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

Look here for the other TimeItResult attributes: https://ipython.org/ipython-doc/2/api/generated/IPython.core.magics.execution.html

Complementing @dsemi's answer: Use -o to save the timeit result into a variable, eg:

obj = %timeit -o somefunc()

The docstring documentation of the TimeitResult when using tab completion shows the available attributes:

Object returned by the timeit magic with info about the run.

Contains the following attributes :

loops: (int) number of loops done per measurement
repeat: (int) number of times the measurement has been repeated
best: (float) best execution time / number
all_runs: (list of float) execution time of each run (in s)
compile_time: (float) time of statement compilation (s)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM