什么是python中的%timeit?

xir*_*uru 70 python ipython

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

%timeit function()
Run Code Online (Sandbox Code Playgroud)

你能解释一下"%"的含义吗?

我认为,"%"总是用于替换字符串中的某些内容,例如%s表示替换字符串,%d替换数据,但我不知道这种情况.

mu *_*u 無 68

%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
Run Code Online (Sandbox Code Playgroud)

要使用它,例如,如果我们想要了解使用是否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
Run Code Online (Sandbox Code Playgroud)

你会得到他们的时间.

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

  • @ alpha_989是的,你可以在函数中包装那些行,然后将函数定时为:`%timeit function()` (2认同)
  • @fountainhead:https://docs.python.org/3/library/timeit.html#timeit.timeit (2认同)
  • 输出“10000 个循环,最好的 3:每个循环 29.6 µs”可以解释为:(1.) 表达式运行 10000 次以获得总时间 (2.) 然后将总时间除以 10000 以获得“每个循环” " 时间和 (3.) 总时间计算进行 3 次,最后 (4.) 3 次总时间中的最小总时间(也称为“3 次最佳时间”)用作输出。我的解释正确吗,是/否? (2认同)

mir*_*ulo 28

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

如果你想看到你可以使用的所有魔法,你只需输入:

%lsmagic
Run Code Online (Sandbox Code Playgroud)

获得线魔法和细胞魔法的列表.

从文档的某些其它神奇信息在这里:

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

根据您是在线还是单元模式,有两种不同的使用方法%timeit.您的问题说明了第一种方式:

In [1]: %timeit range(100)
Run Code Online (Sandbox Code Playgroud)

In [1]: %%timeit 
      : x = range(100)
      :
Run Code Online (Sandbox Code Playgroud)


bak*_*kal 7

IPython 拦截这些。它们被称为内置魔法命令,以下是列表:内置魔法命令

您还可以创建自己的自定义魔法,定义自定义魔法

timeit在这里:%timeit


小智 7

我只是想添加一个关于 %%timeit的非常微妙的点。鉴于它在单元格上运行“魔法” ,你会得到错误......

用法错误:%%timeit找不到行魔术函数

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

我知道这是所有专家都会说的一个小问题,但我只想为那些开始使用魔术的年轻巫师增加半分钱。

  • 这不适用于 iPython shell,仅适用于 Jupyter Notebook (2认同)