捕获IPython魔术函数的结果

eri*_*ang 10 python ipython ipython-magic

我正在尝试捕获IPython Notebook魔术函数的结果对象.特别%timeit

所以下面的代码......

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

t = %timeit say_hello(5)
Run Code Online (Sandbox Code Playgroud)

打印到stdout:

1 loops, best of 3: 5 s per loop
Run Code Online (Sandbox Code Playgroud)

但是,我想捕获%timeit say_hello(5)变量的结果t.

调用TimeitResult生成的对象是由生成的%timeit,但我无法弄清楚如何从Notebook中访问它.

我想要一个更清洁的解决方案,而不是使用sys.stdout技巧手动捕获stdout (此代码将是演示文稿的一部分,所以我试图尽可能地保持它直接).有人有主意吗?

dse*_*emi 15

在您链接到的源文件中,docstring显示了运行timeit magic函数的选项; 其中一个是返回一个对象结果:

-o: return a TimeitResult that can be stored in a variable to inspect
        the result in more details.
Run Code Online (Sandbox Code Playgroud)

所以,如果你跑

obj = %timeit -o somefunc()
Run Code Online (Sandbox Code Playgroud)

obj 将引用返回的结果对象(提示:在对象上使用制表符完成,它将显示它具有的属性).