什么是python中的%timeit?

时间:2015-03-26 14:02:29

标签: python ipython

我总是阅读代码以这种方式计算时间:

%timeit function()

你能解释一下这意味着什么吗?"%"这里?

我认为,"%"总是用来替换字符串中的东西,比如%s表示替换字符串,%d替换数据,但我不知道这种情况。

6 个答案:

答案 0 :(得分:56)

%timeit是一个ipython magic函数,可用于计算特定代码段(单个执行语句或单个方法)

来自文档:

  

%timeit

Time execution of a Python statement or expression

Usage, in line mode:
    %timeit [-n<N> -r<R> [-t|-c] -q -p<P> -o] statement

要使用它,例如,如果我们想知道使用xrange是否比使用range更快,您只需执行以下操作:

In [1]: %timeit for _ in range(1000): True
10000 loops, best of 3: 37.8 µs per loop

In [2]: %timeit for _ in xrange(1000): True
10000 loops, best of 3: 29.6 µs per loop

你会得到他们的时间。

主要优点是您不必导入timer.timeit,并且多次运行代码以确定哪种方法更好; %timeit将根据总共2秒的执行窗口自动计算代码所需的运行次数。

答案 1 :(得分:26)

这在iPython中称为 line magic 。它们的独特之处在于它们的参数只延伸到当前行的末尾,并且魔法本身实际上是用于命令行开发的。 timeit用于计算代码的执行时间。

如果您想查看可以使用的所有魔法,只需键入:

即可
%lsmagic

获取线魔法和细胞魔法的列表。

文档here中的一些其他魔术信息:

  

IPython有一个命令系统,我们称之为 magics ,它有效地提供了一种与Python语法正交的迷你命令语言,并且可以由用户使用新命令进行扩展。 Magics旨在以交互方式键入,因此它们使用命令行约定,例如使用空格分隔参数,使用破折号选项以及命令行环境中典型的其他约定。

根据您是否处于单元模式,有两种不同的方式可以使用%timeit。你的问题说明了第一种方式:

In [1]: %timeit range(100)

VS

In [1]: %%timeit 
      : x = range(100)
      :

答案 2 :(得分:4)

IPython拦截那些,他们称之为内置魔术命令,这里是列表:https://ipython.org/ipython-doc/dev/interactive/magics.html

您还可以创建自己的自定义魔法https://ipython.org/ipython-doc/dev/config/custommagics.html

您的timeit在这里https://ipython.org/ipython-doc/dev/interactive/magics.html#magic-timeit

答案 3 :(得分:2)

我只想在%% timeit上添加一个非常细微之处。如果它在单元格上运行“魔术”,您将得到错误...

UsageError:未找到行魔术函数%%timeit

...如果%% timetime之上有任何代码/注释行。换句话说,请确保%% timeit是单元格中的第一个命令。

我知道所有专家都会说这是一个小问题,但是我只是想为年轻的巫师加半分钱。

答案 4 :(得分:1)

我只想添加另一个有用的优点,即在answermu 無中使用%timeit:

  • 还可以使用当前的控制台变量,而无需像timeit.timeit那样传递整个代码段,以构建在timeit有效的另一个环境中构建的变量。

PS:我知道这应该是上面回答的评论,但我目前对此没有足够的声誉,希望我写的内容对某人有帮助,并帮助我赢得足够的声誉,以便下次发表评论。

答案 5 :(得分:0)

换行符的前缀为字符,其工作方式与OS命令行调用非常相似:它们作为行的其余部分作为参数,并在其中传递参数没有括号或引号。 单元格魔术的前缀为双 %% ,它们是不仅作为其余参数的函数,而且还作为参数单独包含在其下方的行论点。