Python timeit-TypeError:“模块”对象不可调用

时间:2020-03-15 15:23:26

标签: python jupyter-notebook

我通常像这样在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

它如何发生?

2 个答案:

答案 0 :(得分:0)

您当前正在尝试执行timeit模块,而不是其中包含的功能。

您应该将导入语句从import timeit更改为from timeit import timeit。或者,您可以使用timeit.timeit调用该函数。

答案 1 :(得分:0)

搜索并尝试了一段时间后,我意识到,当我们想使用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
  • stmt是要运行的代码
  • 设置是运行TEST_CODE之前需要加载的内容
  • stmt将按照此处给出的编号执行。默认值= 1000000

所以,当我们导入时间时,我想写更多。