Python Timeit,NameError:未定义全局名称。但我没有';不要使用全局变量
我想测量以下代码的执行速度:Python Timeit,NameError:未定义全局名称。但我没有';不要使用全局变量,python,global-variables,nameerror,timeit,Python,Global Variables,Nameerror,Timeit,我想测量以下代码的执行速度: def pe1(): l = [] for i in range(1000): if i%3 == 0 or i%5 == 0: l.append(i) print sum(l) 我将此代码存储在pe1m.py下。 现在我想用python解释器测试文件的速度。我做到了: import timeit import pe1m t = timeit.Timer(stmt = 'pe1m.pe1()') t
def pe1():
l = []
for i in range(1000):
if i%3 == 0 or i%5 == 0:
l.append(i)
print sum(l)
我将此代码存储在pe1m.py下。
现在我想用python解释器测试文件的速度。我做到了:
import timeit
import pe1m
t = timeit.Timer(stmt = 'pe1m.pe1()')
t.timeit()
但我得到:
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
文件“”,第1行,在
文件“/usr/lib/python2.7/timeit.py”,第195行,在timeit中
定时=自内(it、自定时器)
文件“”,第6行,在内部
NameError:未定义全局名称“pe1m”
但我没有任何全局变量 试试这个:
t = timeit.Timer(stmt='pe1()', setup='from pe1m import pe1')
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
对您需要一个
setup
来将模块导入到时间命名空间中——无论您是使用from
还是pe1m.
都是一个问题或首选项。当我这样做时,t=timeit.Timer(stmt='pe1()',setup='from pe1m import pe1')
它只是继续打印pe1m.pe1()的输出。
(即233168)无限。@yak如果您更新您的解决方案(添加t.timeit(number=1)
行),我可以删除下面的答案。当您导入模块时,有一条语句:import pe1m,imho,它是其他模块的输入错误。可能是