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

问题描述 投票:1回答:2

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

它如何发生?

python jupyter-notebook
2个回答
0
投票

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

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


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
  • 所以当我们导入timeit时,我猜需要写更多。

© www.soinside.com 2019 - 2024. All rights reserved.