2016-09-07 45 views
0

我想时间下面的函数,但它显示我的错误,无法导入名称val_in_range,错误是什么,有没有其他方法可以做得更好?Timeit计时python函数

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')并运行它,它运行良好。这是你的真实代码吗?为了比较,我在Linux上运行Python 3.5。 – 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