python time.time()计算代码运行时间

16 篇文章 0 订阅
2 篇文章 0 订阅

计算一个代码跑多久

1,time()

import time

start = time.time()
xxx
xxx
end = time.time()
running_time = end-start
print('time cost : %.5f sec' %running_time)

输出时间默认为秒(对于时间太短可能无法很精确)
举例:
计算两个数/数组相加的时间

import time

def display_time(func):
    def wrapper(*args):
        t1 = time.time()
        print('answer = %.2f'%func(*args))
        t2 = time.time()
        print('time cost: %.6f'%(t2-t1))
    return wrapper
                    
@display_time            #使用装饰器的方法    
def sum_(a,b):
    return (a+b)

sum_(10,20)

>>>answer = 30.00
>>>time cost: 0.004945

上面使用装饰器的方法可以参加笔者python教程第一部分12节

2.timeit()

1,python中文timeit
2,python 英文timeit
这里先看例题再看解析:

Timer()

from timeit import Timer  #导入Timer

def sum_(a,b):
    return (a+b)
‘’‘计算a+b的和画的时间,计算1000的总时间’‘’
t1 = Timer("sum_(10,20)","from __main__ import sum_")
print("time cost %.5f seconds\n"%t1.timeit(number=1000))

注意,上面是计算1000次的总时间,不是平均时间
上面的核心是:

t1 = Timer("sum_(10,20)","from __main__ import sum_")
class timeit.Timer(stmt='pass', setup='pass', timer=<timer function>)

Timer()函数第一个参数是statement(声明),必须是str类型,第二个参数是setup(安装),所以上面的含义是,计算sum_(10,20)即10+20的和,其中sum_函数从__main__中导入,需要注意的是,main()函数就是我们当前的程序。
再举个例子:

import timeit

x = list(range(20000))#[0,1,2,3...19999]
#使用pop函数去除列表的第一个数
popzero = timeit.Timer("x.pop(0)","from __main__ import x")
#计算1000次花的时间
print(popzero.timeit(number=1000))

#使用pop去除最后一个数
popend = timeit.Timer("x.pop()","from __main__ import x")
print(popend.timeit(number=1000))

>>>0.012933371937833726
>>>0.00024989701341837645

上面的方法是用来计算pop()和pop(i)(i表示第i个数)的运行时间的
从时间复杂度而言,pop(i)是O(n),是pop()始终是O(1).所以pop(i)的时间要长一些。

————————以下为原文————————
timeit有两种用法,

用法1:在命令行上运行

在这里插入图片描述
在命令行上运行1+1,并计算时间。
上面-m不可少,表示在命令行将library module库像脚本一样运行,即在命令行运行程序。
上面100000000 loops表示运行了1亿次1+1,而best of 3表示调用了三次timeit()函数,每调用一次timeit()都运行1亿次循环。通过调用三次,其中最好的一次(时间最小)是每次循环花了0.00788 usec(微秒),所以总时间是:
1 亿 × 0.00788 × 1 0 − 6 秒 = 7.8 秒 1亿\times 0.00788\times 10^{-6} 秒=7.8秒 1亿×0.00788×106=7.8
这个运行多少loops在命令行上是不确定的,系统自己根据运行来执行,一般而言,运行时间越小,loops次数越多。另外这个7.8秒实际上并不需要算出来,因为我们只看一次运行的时间,所以1+1运行花了0.00788微秒。
但是我们可以自己来给定运行的loops次数,
在这里插入图片描述
这里用到的-n 等命令如下:
在这里插入图片描述
-s表示开始只执行一次,在下面会说到

用法2:在程序块中运行

强烈建议看这篇博文,写的很细 https://www.cnblogs.com/hengyumo/p/10617018.html
如果只想粗略知道如何用,看我写的即可

from timeit import timeit

print(timeit('1+1',number=1000))

在这里插入图片描述
上面代码等价于

from timeit import timeit
x='''
1+1
'''
print(timeit(stmt=x,number=1000))

stmt表示statement,放入需要执行的表达式,多个表达式用;分开
在这里插入图片描述

这个时间算的是1000次执行的时间,单位的计算见下文
假如把number=去掉,

from timeit import timeit
x='''
1+1
'''
print(timeit(stmt=x))

在这里插入图片描述
时间反而变长了,这是因为默认number = 1 0 6 =10^6 =106,即计算了10的6次方次,总的时间。

单位问题:

假如计算的时候写number=1,即表示计算的是一次,输出的也是一次计算的时间,单位是秒。当不写number的时候,默认number是等于 1 0 6 10^6 106,即计算了10的6次方次的总时间,所以单位是微秒

from timeit import timeit
import time
s=time.time()
x=[i**2 for i in range(10000)]
e=time.time()
print('%.8f'%(e-s))
print(timeit('x=[i**2 for i in range(10000)]',number=1))

在这里插入图片描述
上面写了number=1,所以单位都是秒

from timeit import timeit
import time
s=time.time()
x=[i**2 for i in range(10000)]
e=time.time()
print('%.8f'%(e-s))
print(timeit('x=[i**2 for i in range(10000)]'))

不写number,单位是微秒,(这个时候因为要计算1000000次,所以很慢)
可能会经常看到博文用%timeit xxx的用法,这个是在ipython里直接用的,不需要像python里面需要import timeit
%在ipython里叫做line magic魔法行命令,%%为cell magic魔法单元命令

  • 28
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值