问题:python中的%timeit是什么?
我总是像这样阅读代码来计算时间:
%timeit function()
您能在这里解释什么是“%”吗?
我认为,“%”总是用于替换字符串中的某些内容,例如%s表示替换字符串,%d替换数据,但是我不知道这种情况。
回答 0
%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
要使用它,例如,如果我们想确定using是否xrange
比using更快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
构建在另一个可以正常工作的环境中构建的变量。
回答 1
这就是所谓的一系魔法中的IPython。它们的独特之处在于其参数仅扩展到当前行的末尾,而魔术本身的确是为命令行开发而构造的。 timeit
用于定时执行代码。
如果您想查看所有可以使用的魔法,只需键入:
%lsmagic
以获得线魔术和细胞魔术的列表。
从文档的某些其它神奇信息在这里:
IPython具有一个称为魔术的命令系统,该系统有效地提供了一种迷你命令语言,该语言与Python的语法正交,并且可由用户使用新命令进行扩展。魔术应该以交互方式键入,因此它们使用命令行约定,例如使用空格分隔参数,使用破折号表示选项以及命令行环境中的其他典型约定。
根据您是处于行模式还是单元格模式,有两种不同的使用方法%timeit
。您的问题说明了第一种方式:
In [1]: %timeit range(100)
与
In [1]: %%timeit
: x = range(100)
:
回答 2
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
回答 4
我只是想添加一个关于%% timeit的非常微妙的观点。如果它在单元上运行“魔术” ,您将得到错误…
UsageError:%%timeit
找不到行魔术函数
…如果%% timeit上方有任何代码/注释行。换句话说,请确保%% timeit是单元格中的第一个命令。
我知道这是所有专家都不会说的一个小问题,但是我只是想为年轻的巫师们以魔术开始增加我的半分钱。
回答 5
行魔法前缀与%的性格和工作很像OS命令行调用:他们得到作为参数的行,其中参数都没有括号或引号传递的其余部分。单元魔术以%%作为双前缀,并且它们是函数,它们不仅作为该行的其余部分作为参数,而且还作为单独的参数作为其下方的行的参数。