ImportError: невозможно импортировать имя Ошибка

У меня есть очень простая тестовая функция, и мне нужно зафиксировать время ее выполнения с помощью модуля timeit, но я получаю сообщение об ошибке

Функция:

import timeit
def test1():                            
    l = []
    for i in range(1000):
        l = l + [i]

t1 = timeit.Timer("test1()", "from __main__ import test1")
print(t1.timeit(number=1000))

Ошибка: C:\Python34\lib\timeit.py:186: in timeit time = self.inner(it, self.timer): 3: in inner ??? E
ImportError: невозможно импортировать имя 'test1' =========== 1 ошибка за 0,03 секунды ==============

Можете ли вы помочь мне с решением?


person shwz    schedule 02.09.2016    source источник
comment
Я не могу воспроизвести это. Это весь ваш код?   -  person Tamas Hegedus    schedule 02.09.2016
comment
В приведенном выше коде нет ничего в функции test1. Вам нужно сделать отступ в строках 3,4,5. Я подозреваю, что проблема в том, что timeit вручную импортирует ваш код и получает ошибку импорта.   -  person Martin Bonner supports Monica    schedule 02.09.2016
comment
Я делаю ошибку при копировании кода здесь, отступ правильный в моей среде IDE @MartinBonner   -  person shwz    schedule 02.09.2016
comment
Не могли бы вы отредактировать вопрос, чтобы показать правильный отступ, пожалуйста. А также включите код, который вызывает timeit (и импортирует test1).   -  person Martin Bonner supports Monica    schedule 02.09.2016
comment
Готово :) @MartinBonner   -  person shwz    schedule 02.09.2016


Ответы (1)


Я думаю, что есть пара проблем с вашим кодом. Прежде всего убедитесь, что вы можете импортировать timeit. И он у вас есть как модуль. Для этого вы можете просто запустить:

 python -m timeit '"-".join(str(n) for n in range(100))'

Если он работает нормально, у вас обязательно есть модуль timeit.

Теперь относительно вашего вопроса. Я взял на себя смелость переписать его в более чистом виде.

import timeit    

def append_list():
 num_list = []
 for i in range(1000):
         num_list.append(i)

print(timeit.timeit(stmt=append_list, number=1000)) #number is the number of repetion of the operation, in this case, 1000
# you can also run
print(timeit.timeit(stmt=append_list, number=1))   

Теперь приведенное выше может сделать то, что вы хотели сделать, т.е. рассчитать количество времени, необходимое для добавления чисел от 1 до 1000 в список.

person Vinit Kumar    schedule 02.09.2016
comment
Спасибо, Винит, ваш код, похоже, работает в моем случае. но почему я получаю сообщение об ошибке при использовании timeit.Timer? Я использовал его в других кодах, и он просто работал нормально! я просто не могу понять, почему это не работает здесь - person shwz; 02.09.2016