Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Timeit,NameError:未定义全局名称。但我没有';不要使用全局变量_Python_Global Variables_Nameerror_Timeit - Fatal编程技术网

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,它是其他模块的输入错误。可能是