函数测量时间的归零

时间:2016-11-28 19:14:05

标签: python

import time  
def find(a):  
    count = 0  
    for item in a:  
        count = count + 1  
        if item == 2:  
            return count  

a = [7,4,5,10,3,5,88,5,5,5,5,5,5,5,5,5,5,55,
     5,5,5,5,5,5,5,5,5,5,5,5,55,5,5,5,5,5,
     5,5,5,5,5,2,5,5,5,55,5,55,5,5,5,6]
print (len(a))  

sTime = time.time()  
print (find(a))  
eTime = time.time()  

ave = eTime - sTime  
print (ave)

我想测量这个功能的执行时间 我的 print(ave)返回0;为什么呢?

2 个答案:

答案 0 :(得分:1)

要准确计算代码执行时间,您应该使用timeit,而不是timetimeit可以轻松地重复代码块进行计时,以避免非常接近于零的结果(问题的原因)

import timeit

s = """
def find(a):  
    count = 0  
    for item in a:  
        count = count + 1  
        if item == 2:  
            return count  

a = [7,4,5,10,3,5,88,5,5,5,5,5,5,5,5,5,5,55,5,5,5,5,5,5,5,5,5,5,5,5,55,5,5,5,5,5,5,5,5,5,5,2,5,5,5,55,5,55,5,5,5,6]  
find(a)
"""
print(timeit.timeit(stmt=s, number=100000))

这将测量在多行字符串s中运行代码100,000次所需的时间。请注意,我将print(find(a))替换为find(a),以避免将结果打印100,000次。

多次运行有利于以下几个原因:

  • 通常,代码运行得非常快。总结许多快速运行会产生一个实际上有意义且有用的数字
  • 运行时间取决于许多可变的,不可控制的因素(例如使用计算能力的其他进程)。多次运行有助于规范化
  • 如果您使用timeit比较两种方法来查看哪种方法更快,则多次运行会更容易看到最终结果

答案 1 :(得分:0)

我也不确定;我得到的时间大约是1.4E-5。 尝试将调用放入循环中以测量更多迭代:

for i in range(10000):
    result = find(a)
print(result)
相关问题