2016-09-07 2 views
0

Я пытаюсь выполнить функцию ниже, однако она показывает мне ошибку, не может импортировать имя val_in_range, какая ошибка, есть ли какой-либо другой способ сделать это лучше?Timeit timing a python function

import timeit 

x = 10000000 

def val_in_range(x, val): 
    return val in range(x) 

print (val_in_range(x,x/2)) 

timeit.timeit('val_in_range(x,x/2)', 'from __main__ import val_in_range, x', number=10) 

Выход:

True 
Traceback (most recent call last): 
    File "python", line 11, in <module> 
    File "<timeit-src>", line 3, in inner 
ImportError: cannot import name 'val_in_range' 
+0

Я установил этот точный код в исходный файл (добавив shebang, '#!/Usr/bin/env python3') и запустил его, и он прошел нормально. Это ваш настоящий код? Для сравнения я использую Python 3.5 для Linux. – ShadowRanger

+0

попробуйте здесь - https://repl.it/DTwI, – garg10may

+1

Эта ссылка для меня слишком медленная или сломанная, но независимо от того, я бы не стал использовать онлайн-переводчики здесь; они могут использовать странные механизмы для выполнения кода (например, через 'eval' /' exec'), которые не соответствуют стандартным поведениям Python для сценариев или обычного интерактивного интерпретатора (например, код может не выполняться в области '__main__ 'или значения, которые он определяет, не установлены там до тех пор, пока код не завершится, ни один из которых не сломает ваш тестовый пример). – ShadowRanger

ответ

1

заменить timeit.timeit('val_in_range(x,x/2)', 'from __main__ import val_in_range, x', number=10)

timeit.timeit(lambda:val_in_range(x,x/2), number=10) с

вы можете напечатать значение непосредственно с помощью print заявление.

+0

это работает, но что не так с моим кодом, @ShadowRanger упоминает, что он отлично подходит для него. – garg10may

+1

Ваш код будет работать на вашей локальной машине, но не на онлайн-переводчиках из-за способа обработки файлов. – maharshi