魔法函数timeit

3
我将使用神奇的%%timeit函数来获取执行某些代码所需的时间。让我困扰的是,当我运行%%timeit时,我并没有得到结果。例如:
a=5
b=3

%%timeit
c = a + b

现在如果我想在下一个单元格中使用c,会发现c未定义。
print(c)
>>>NameError: name 'c' is not defined

你能帮我理解为什么会出现这种情况吗?在使用魔法函数%%timeit的特定单元格中,为什么c没有被存储下来?


"Cell"? 你是指 "行" 吗? "语句"? "变量"? - deceze
啊,看起来你在谈论IPython...!? - deceze
是的,我应该表明一下,我正在使用Python 3.5的IPython/Jupyter。 - MarcoQ
2个回答

3
当你使用%%timeit进行时间编码时,你提供的代码将在一个单独的命名空间中执行,因此其效果不会对你的环境产生影响。

好的,我看到这是一个不同的命名空间,但我不确定我理解它的好处是什么?我写c=a+b的目的是为了计算c。为什么它必须将其带到不同的命名空间,以便我无法得到结果? - MarcoQ
你需要阅读 timeit 库的代码才能获得那种细节水平 - 我可以告诉你正在发生什么,但不能告诉你为什么。 - holdenweb
timeit 可以运行您的代码多次,甚至数千次。在您的示例中,我得到了 10000000 loops, best of 3: 55.6 ns per loop。通常我会运行一次表达式来检查值,然后使用 timeit 来测试性能。 - hpaulj

2

cell mode:

%%timeit [-n<N> -r<R> [-t|-c] -q -p<P> -o] setup_code code code...

In cell mode, the statement in the first line is used as setup code (executed but not timed) and the body of the cell is timed. The cell body has access to any variables created in the setup code.

https://ipython.org/ipython-doc/3/interactive/magics.html#magic-timeit

您正在单元格模式下执行,该行只是设置代码;这意味着它实际上没有计时,并且其结果仅对随后的单元格代码可访问。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接