%timeit是否通过命令行中的参数应用于函数或引用?

时间:2015-11-22 19:20:35

标签: python timeit

我正在按照建议运行'use strict' class Mouser { constructor() { this.counter = 0 this.clicked = function (event) { this.counter++ console.log('clicks:', this.counter) if (this.counter >= 10) this.remove() } window.addEventListener('click', this.clicked.bind(this)) } remove() { console.log('Removing click listener') // this line runs .. window.removeEventListener('click', this.clicked.bind(this)) } } var mouse = new Mouser() ,其中%timeit following是已定义的函数。

我已尝试使用following但由于某种原因import timeit无法运行。我得到一个语法错误,所以我没有正确使用它。我做了一个简短的搜索,在%timeit库上产生了页面,但这在使用方面让我更加困惑。

2 个答案:

答案 0 :(得分:5)

我怀疑您将%timeittimeit混淆:

  • %timeit是一个IPython"魔法"只能在IPython shell会话中工作的命令。示例用法是:

    In [1]: %timeit myfunc()
    
  • timeit是标准的Python模块 - 您可以在脚本中import timeit使用timeit.timeit("expression")等。有关详细信息,请参阅the documentation

以下是一个示例,显示了在IPython会话中使用timeit.timeit的一种方法:

In [2]: def foo(): pass

In [3]: import timeit

In [4]: timeit.timeit("foo()", setup="from __main__ import foo", number=10000)
Out[4]: 0.004509925842285156

在这种情况下,我们的函数foo是在IPython会话的全局命名空间中定义的,因此我们从__main__导入它。如果它是在某个外部模块中定义的,则需要修改import语句以反映这一点,例如:

In [5]: timeit.timeit("pow(10, 3)", setup="from math import pow", number=10000)
Out[5]: 0.00642085075378418

我在pow模块中导入math功能。

答案 1 :(得分:0)

尝试使用%timeit从IPython的魔法重现timeit,试试这个:

timeit.Timer(my_function).repeat(3, 1000)

%timeit在n次执行中最好使用3次计数,其中n在内部选择(因此在repeat()中使用1000可能不是一个好选择)

reference

  

-n N:在循环中执行给定语句N次。如果未给出该值,则选择拟合值。

     

-r R:重复循环迭代R次并取得最佳结果。默认值:3