Python计算代码运行时间的四种方法

 更新时间:2026年01月07日 09:36:05   作者:Asia-Lee  
这篇文章主要为大家详细介绍了使用Python计算代码运行时间的四种方法,文中的示例代码讲解详细,大家可以根据自己的需要进行选择

1、计算程序运行CPU的时间

#python 的标准库手册推荐在任何情况下尽量使用time.clock().
#只计算了程序运行CPU的时间,返回值是浮点数
import time
start =time.clock()
#中间写上代码块
end = time.clock()
print('Running time: %s Seconds'%(end-start))

运行结果如下

Running time: 2.26660703157 Seconds

2、计算CPU的总运行时间

#该方法包含了其他程序使用CPU的时间,返回值是浮点数
import time
start=time.time()
#中间写上代码块
end=time.time()
print('Running time: %s Seconds'%(end-start))

运行结果

Running time: 4.90400004387 Seconds

3、方法三

#该方法包含了其他程序使用CPU的时间
import datetime
start=datetime.datetime.now()
#中间写代码块
end=datetime.datetime.now()
print('Running time: %s Seconds'%(end-start))

运行结果

Running time: 0:00:02.412000 Seconds

4、方法四

#在 Unix 系统中,建议使用 time.time(),在 Windows 系统中,建议使用 time.clock()
#实现跨平台的精度性可以使用timeit.default_timer()
import timeit
start=timeit.default_timer()
#中间写代码块
end=timeit.default_timer()
print('Running time: %s Seconds'%(end-start))

运行结果

Running time: 2.31757675399 Seconds

注释:以上四种代码运行环境是Win7系统,都是在相同的代码块下运行的,可以对比代码运行时间获取windows系统下的最优方法;对于其他系统可以进行测试获取最优方法!

5、方法补充

在Python中,你可以使用内置的time模块来测试代码的运行时间。下面是一个例子:

import time

start_time = time.time()  # 获取当前时间

# 在这里放置你想要测试的代码
for i in range(0, 1000000):
    pass

end_time = time.time()  # 代码运行后再次获取当前时间

execution_time = end_time - start_time  # 计算运行时间

print(f"代码运行时间: {execution_time}秒")

这个代码会首先记录开始时间,然后运行一段代码(在这个例子中是一个简单的for循环),然后再记录结束时间。运行时间就是结束时间减去开始时间。

另外,如果你想要更精确的时间测量,你可以使用timeit模块,它提供了一个简单的方法来计时小段Python代码。它有命令行接口和Python库接口。这是一个例子:

import timeit

start_time = timeit.default_timer()

# 在这里放置你想要测试的代码
for i in range(0, 1000000):
    pass

end_time = timeit.default_timer()

print(f"代码运行时间: {end_time - start_time}秒")

timeit.default_timer()`在不同的平台上会使用最精确的计时器。

示例

编写一个Python脚本来计算每个函数运行10000次的时间。

下面是一个示例代码:

import timeit

# 定义你的函数
def function1():
    # 函数1的代码
    pass

def function2():
    # 函数2的代码
    pass

def function3():
    # 函数3的代码
    pass

# 使用timeit来测量每个函数的执行时间
print("Measuring execution time for function1:")
start_time = timeit.default_timer()
for _ in range(10000):
    function1()
end_time = timeit.default_timer()
print(f"Time taken by function1: {end_time - start_time} seconds")

print("Measuring execution time for function2:")
start_time = timeit.default_timer()
for _ in range(10000):
    function2()
end_time = timeit.default_timer()
print(f"Time taken by function2: {end_time - start_time} seconds")

print("Measuring execution time for function3:")
start_time = timeit.default_timer()
for _ in range(10000):
    function3()
end_time = timeit.default_timer()
print(f"Time taken by function3: {end_time - start_time} seconds")

然而,这种方法不是timeit模块的最佳实践,因为它包含了循环的开销。更好的方法是使用timeit.repeat(),这样timeit模块会为你处理循环,并且可以提供更准确的计时,排除其他不必要的开销。

下面是使用timeit.repeat()的改进版本:

import timeit

# 定义你的函数
def function1():
    # 函数1的代码
    pass

def function2():
    # 函数2的代码
    pass

def function3():
    # 函数3的代码
    pass

# 设置timeit参数
setup_code = """
from __main__ import function1, function2, function3
"""
stmt1 = "function1()"
stmt2 = "function2()"
stmt3 = "function3()"
number_of_runs = 10000
repeats = 3  # 重复测量次数以获得更稳定的结果

# 使用timeit.repeat来测量每个函数的执行时间
print("Measuring execution time for function1:")
times1 = timeit.repeat(stmt=stmt1, setup=setup_code, repeat=repeats, number=number_of_runs)
print(f"Average time taken by function1: {min(times1)} seconds")

print("Measuring execution time for function2:")
times2 = timeit.repeat(stmt=stmt2, setup=setup_code, repeat=repeats, number=number_of_runs)
print(f"Average time taken by function2: {min(times2)} seconds")

print("Measuring execution time for function3:")
times3 = timeit.repeat(stmt=stmt3, setup=setup_code, repeat=repeats, number=number_of_runs)
print(f"Average time taken by function3: {min(times3)} seconds")

在这个例子中,setup_code导入了必要的函数,stmt1stmt2stmt3是要执行的语句(即函数调用),number_of_runs指定了每个函数要运行的次数,而repeats指定了每个测量要重复的次数。最后,我们取多次测量的最小值作为最接近真实执行时间的估计。

解释timeit模块中setup参数

setup参数接收一个字符串,该字符串包含在执行要计时的语句之前需要运行的代码。告诉timeit如何设置环境以便能够运行这段代码。这通常包括导入必要的模块或定义要使用的函数和变量。

上述代码片段中:

setup_code = """
from __main__ import function1, function2, function3
"""

setup_code是一个多行字符串,它告诉timeit模块从__main__模块中导入function1function2function3这三个函数。这里的__main__模块是指当前正在运行的Python脚本,也就是包含这些函数定义的脚本。

timeit模块将在一个单独的命名空间中执行setup代码,以确保测量的是纯粹的函数执行时间,而不受其他全局变量的影响。通过在setup中导入函数,你确保了timeit能够访问并正确调用这些函数。

简而言之,from __main__ import function1, function2, function3这行代码的目的是让timeit知道它需要测量的函数在哪里,并确保这些函数在测量过程中是可用的。

到此这篇关于Python计算代码运行时间的四种方法的文章就介绍到这了,更多相关Python计算代码运行时间内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python3+PyQt5自定义视图详解

    python3+PyQt5自定义视图详解

    这篇文章主要为大家详细介绍了python3+PyQt5自定义视图的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • Python中Excel图片插入、提取与压缩操作的完整指南

    Python中Excel图片插入、提取与压缩操作的完整指南

    通过 Python,我们可以实现对 Excel 中图片的自动化管理,这不仅能节省大量人工操作时间,还能确保图片布局一致、美观,同时支持批量处理、图片压缩和格式优化,下面小编就和大家介绍一下具体的步骤吧
    2026-03-03
  • Python中cv2.Canny() 函数使用方法

    Python中cv2.Canny() 函数使用方法

    cv2.Canny() 函数是 OpenCV 中的边缘检测函数之一,用于检测图像的边缘,它的基本原理是通过计算图像中每个像素点的梯度值来检测边缘,本文通过示例代码介绍Python中cv2.Canny() 函数用法,需要的朋友参考下吧
    2023-07-07
  • Python环境变量配置超详细教程(小白也能轻松搞定)

    Python环境变量配置超详细教程(小白也能轻松搞定)

    对于刚接触Python的用户来说,配置Python环境变量可能是一个令人头疼的问题,这篇文章主要介绍了Python环境变量配置的相关资料,通过文中介绍的方法小白也能轻松搞定,需要的朋友可以参考下
    2025-10-10
  • TensorFlow人工智能学习按索引取数据及维度变换详解

    TensorFlow人工智能学习按索引取数据及维度变换详解

    这篇文章主要为大家介绍了TensorFlow人工智能学习按索引取数据及维度变换的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-11-11
  • python实现数组求和与平均值

    python实现数组求和与平均值

    这篇文章主要介绍了python实现数组求和与平均值方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Python环境搭建之OpenCV的步骤方法

    Python环境搭建之OpenCV的步骤方法

    本篇文章主要介绍了Python环境搭建之OpenCV的步骤方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • Python实现简单字典树的方法

    Python实现简单字典树的方法

    这篇文章主要介绍了Python实现简单字典树的方法,实例分析了Python字典树的定义、实现与使用技巧,需要的朋友可以参考下
    2016-04-04
  • PyTorch基础之torch.nn.CrossEntropyLoss交叉熵损失

    PyTorch基础之torch.nn.CrossEntropyLoss交叉熵损失

    这篇文章主要介绍了PyTorch基础之torch.nn.CrossEntropyLoss交叉熵损失讲解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Keras 如何修改图片通道的顺序

    Keras 如何修改图片通道的顺序

    这篇文章主要介绍了Keras 修改图片通道顺序的操作方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05

最新评论