在 Python 中% timeit 是什么?

我总是这样读代码来计算时间:

%timeit function()

“%”在这里是什么意思?

我认为,“%”总是用来替换字符串中的某些内容,比如% s 表示替换字符串,% d 表示替换数据,但我对这种情况一无所知。

226651 次浏览

IPython 会拦截这些命令,它们被称为内置的魔法命令,下面是这个列表: 内置的魔法命令

您也可以创建自己的自定义魔术,Ref = “ https://ipython.org/ipython-doc/dev/config/custommagics.html”rel = “ nofollow noReferrer”> 定义自定义魔法

你的 timeit在这里: 魔法时间(magic-timeit) rel = “ nofollow noReferrer”>% timeit

这在 IPython 中称为 线魔术。它们的独特之处在于,它们的参数只扩展到当前行的末尾,而且魔法本身的结构确实是为命令行开发而设计的。timeit用于计算代码执行的时间。

如果你想看到所有你可以使用的魔法,你可以简单地输入:

%lsmagic

得到线魔法和细胞魔法的列表。

文档 给你中的一些进一步神奇信息:

IPython 有一个命令系统,我们称之为 魔法,它有效地提供了一种与 Python 语法正交的迷你命令语言,用户可以用新命令扩展它。魔术意味着交互式输入,因此它们使用命令行约定,例如使用空格分隔参数、选项使用破折号以及其他典型的命令行环境约定。

根据您是处于 台词模式还是 手机模式,有两种不同的方式来使用 %timeit。你的问题说明了第一种情况:

In [1]: %timeit range(100)

对。

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

%timeit是一个 IPython 魔法函数,它可以用来计算特定代码段(单个执行语句或单个方法)的时间。

根据文件:

%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

你会得到他们的时间。

%timeit的主要优点是:

  • 您必须导入 timeit.timeit 从标准图书馆,并多次运行代码以确定哪种方法更好。

  • % timeit 将根据总共2秒的执行窗口自动计算代码所需的运行次数。

  • 您还可以使用当前的控制台变量,而不必像在 timeit.timeit中那样传递整个代码片段,从而构建在另一个可以工作的环境中构建的变量。

行魔术 %字符作为前缀,与 OS 命令行调用非常相似: 它们作为参数传递行的其余部分,其中参数没有括号或引号。细胞魔法以双 %%作为前缀,它们是函数,不仅可以作为行的其余部分的参数,还可以作为单独参数中行下面的参数。

一个关于%% timeit 的 非常微妙点: 假设它在 手机上运行“魔术”,您将得到错误..。

UsageError: 找不到行魔法函数 %%timeit

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