Python timeit - TypeError: объект 'module' не вызывается - PullRequest
1 голос
/ 15 марта 2020

Я обычно использую timeit в ноутбуке jupyter следующим образом:

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 голосов
/ 16 марта 2020

Пройдя поиск и попробовав некоторое время, я понимаю, что когда мы хотим использовать 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 run
  • Stmt будет выполняться согласно числу дается здесь. default = 1000000

, поэтому, когда мы импортируем время, нам нужно написать больше.

0 голосов
/ 15 марта 2020

В настоящее время вы пытаетесь выполнить модуль timeit, а не функцию, содержащуюся в нем.

Вы должны изменить оператор импорта с import timeit на from timeit import timeit. Кроме того, вы можете вызвать функцию, используя timeit.timeit.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...