我通常在jupyter笔记本中这样使用timeit:
def some_function():
for x in range(1000):
return x
timeit(some_func())
并获得如下结果:
6.3 ms ± 42.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
但是今天我遇到了这样的错误:
TypeError Traceback (most recent call last)
<ipython-input-11-fef6a46355f1> in <module>
----> 1 timeit(some_func())
TypeError: 'module' object is not callable
它如何发生?
您当前正在尝试执行timeit
模块,而不是其中包含的功能。
您应该将导入语句从import timeit
更改为from timeit import timeit
。或者,您可以使用timeit.timeit
调用该函数。
搜索并尝试了一会后,我意识到当我们想使用timeit(some_function())
时,我们不需要import timeit
,但是我们应该像这样在jupyter笔记本的另一个输入中编写它:
IN [1]:
def some_function():
for x in range(1000):
return x
IN [2]:
timeit(some_func())
我们将得到这样的输出:
280 ns ± 2.78 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
当我们像这样在一个输入中编写它时:
IN [1]:
def some_function():
for x in range(1000):
return x
timeit(some_func())
我们将得到一个未定义的错误时间,当我们'导入时间'时,将出现另一个错误,就像我在问题TypeError: 'module' object is not callable
上产生的。
因为当我们import timeit
时,我们需要指定stmt和设置(如果可用),例如:
import timeit
SETUP = """
import yourmodul_here
"""
TEST_CODE = """
def some_function():
for x in range(1000):
return x
"""
timeit.timeit(stmt=TEST_CODE, setup=SETUP, number=2000000)
我们将得到如下输出:
0.12415042300017376
TEST_CODE
运行之前需要加载的东西>所以当我们导入timeit时,我猜需要写更多。