如果这有点不对劲或者我不明白这是怎么回事,那我就不好了。我试图使用下面的代码获取range(1,x)
的时间
代码
import timeit
def main(x):
return range(1,x)
def timeThem(x):
start = timeit.default_timer()
main(x)
stop = timeit.default_timer()
return stop - start
for i in range(5):
print(timeThem(i))
现在我预计,由于x在range(1,x)
中变得越来越大,执行此操作所需的时间将更长。我猜是这样的
预期产出
.01 .02 .03 .04 .05
但是不,由于某种原因,我的时间输出变短了。如下图所示,我得到的东西与我想象的完全不同
接收到的输出
8.219999999975469e-07
6.740000000060586e-07
1.0670000000004287e-06
4.939999999967193e-07
4.420000000032731e-07
我做错了什么?还是我不明白这到底是怎么回事
从
range
文档中:range
不生成实际序列,因此它可以以恒定时间运行。请注意,迭代结果是在线性时间内完成的此外,您的值太小,即使
range
以线性时间运行,也看不到时间上的任何显著差异。因此,您正在测量噪声基本上,生成器不是立即执行的,而是一个具有两个值的迭代器,并且还没有对其求值。所以不管你给
x=1
、x=100
还是x=1000000
都没有关系。从性能角度看,它基本上返回一个元组,如这是由于生成器的性质决定的,如果您对其进行迭代,它将被计算。例如
list(range(0, <infity>) )
会中断你的记忆,但for i in range(0,<infity>): print(i)
只会花费永远的时间来计算所以
range(x, 1000 )
只创建了一个对象,而没有对其求值timeThem
是一个专有名称,但在python中,我们遵循pep8,即应该使用像time_them
这样的蛇壳。 就我个人而言,我建议您使用类似time_function
的方法来更明确地说明函数应该做什么李>相关问题 更多 >
编程相关推荐