函数测量时间的归零

2024-04-24 06:51:01 发布

您现在位置: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)

我想测量这个函数的执行时间 Myprint(ave)返回0;为什么?你知道吗


Tags: inimportforlenreturniftimedef
2条回答

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

for i in range(10000):
    result = find(a)
print(result)

要准确地计时代码执行,应该使用^{},而不是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))

这将度量在多行字符串中运行代码s100000次所需的时间。注意,我将print(find(a))替换为find(a),以避免打印100000次结果。你知道吗

运行多次是有利的,原因如下:

  • 一般来说,代码运行得非常快。将许多快速运行的结果相加得到一个实际有意义和有用的数字
  • 运行时间依赖于许多可变的、不可控的因素(例如使用计算能力的其他进程)。多次运行有助于正常化
  • 如果您使用timeit来比较两种方法以确定哪种方法更快,那么多次运行将更容易看到结论性结果

相关问题 更多 >