Python小知识:用timeit测试代码性能

用timeit测试代码性能

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

为了达到这个目的,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

推荐阅读

表弟说,这个Python定时任务,能挣五千,问我信吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值