Python每天3分钟 – #029用timeit测试代码性能

欢迎访问Python每天3分钟系列。

每天花3分钟时间,学习或温习一个Python知识点。

图片

今天是第029篇:

用timeit测试代码性能

昨天的3分钟我们学习了使用time.time()测试一个函数运行了多长时间:

import time

# 记录开始时间
start_time = time.time()

# 计算从10000的阶乘
total = 1
for i in range(1, 10000):
 total = total * i

# 记录结束时间
end_time = time.time()

# 计算和打印用时
used_time = end_time - start_time
print(f'共用时:{used_time}')

这个方法还行。但是电脑每次执行时间可能会有差异。

做性能测试,我们通常会运行同一段代码很多次,然后取平均时间来衡量一个函数或者一段代码的执行效率。

为了达到这个目的,Python有一个很好用的模块,那就是:timeit

先看一个简单的例子,我们要测试下面这段代码的执行时间:

# 生成一个由2的n次方组成的列表
L = [2 ** n for n in range(20)]
print(L)

运行结果是:

[1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288]

在交互式Python测试代码性能

>>> import timeit
>>> timeit.timeit('L = [2 ** n for n in range(20)]')
4.08945516590029
  • timeit模块是Python自带的模块,可以直接使用
  • timeit重复执行上面的代码100万次(默认值),然后打印出总用时。这个次数可以自己通过number参数修改。
  • 上面的例子是交互式Python,同样也可以写在Python代码文件中

在命令行下执行timeit

timeit也可以在命令行下直接执行,这样更方便:

$ python -m timeit 'L = [2 ** n for n in range(10)]'
100000 loops, best of 3: 2.99 usec per loop

测试多行代码的性能

如果要测试多行代码的性能,可以通过三括号把代码包起来:

import timeit
s = """\
L = []
for n in range(10):
    L.append(2 ** n)"""
t = timeit.timeit(s)

在命令行中可以使用分号做多行分割:

$ python -m timeit 'x = 2; L = [x ** n for n in range(10)]'
100000 loops, best of 3: 3.07 usec per loop

或者用多个字符串传入:

$ python3 -m timeit 'x = 2' 'L = [x ** n for n in range(10)]'
100000 loops, best of 3: 3.03 usec per loop

如果多行代码有不同的缩进,可以在字符串中保留缩进:

$ python3 -m timeit \
'L = []' 'for n in range(10):' '    L.append(2 ** n)'
100000 loops, best of 3: 3.47 usec per loop

今天就说到这里,有问题给我留言。

原文链接:https://www.zsiss.com/5279.html,转载请注明出处。

0

评论0

请先

爱分享推出ChatGPT国内镜像,无需魔法直接用!写文章,写代码,做PPT,做网站原创软文效果好到爆炸 https://chat.gcrup.com

社交账号快速登录