Ben*_*ey4 8 python global-variables timeit nameerror
我想测量以下代码的执行速度:
def pe1():
l = []
for i in range(1000):
if i%3 == 0 or i%5 == 0:
l.append(i)
print sum(l)
Run Code Online (Sandbox Code Playgroud)
我将此代码存储在pe1m.py下.现在我想用python解释器测试文件的速度.我做了:
import timeit
import pe1m
t = timeit.Timer(stmt = 'pe1m.pe1()')
t.timeit()
Run Code Online (Sandbox Code Playgroud)
但我得到:
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/timeit.py", line 195, in timeit
timing = self.inner(it, self.timer)
File "<timeit-src>", line 6, in inner
NameError: global name 'pe1m' is not defined
Run Code Online (Sandbox Code Playgroud)
但我没有任何全局变量.
yak*_*yak 15
试试这个:
t = timeit.Timer(stmt='pe1()', setup='from pe1m import pe1')
Run Code Online (Sandbox Code Playgroud)
timeit.Timer对象不知道您正在调用它的命名空间,因此它无法访问pe1m您导入的模块.
该setup参数是在计时语句的上下文中执行的语句,它们共享相同的命名空间,这样无论你定义在那里,将是访问stmt.
你也可以试试这个
>>>def pe1():
>>> l = []
>>> for i in range(1000):
>>> if i%3 == 0 or i%5 == 0:
>>> l.append(i)
>>> print(sum(l))
>>>
>>>from timeit import time it
>>>timeit('pe1()',setup="from __main__ import pe1",number=100) # Run 100 times
>>>timeit('pe1()',setup="from __main__ import pe1") # run default times of 1000000
Run Code Online (Sandbox Code Playgroud)