python计算时间装饰器_python – timeit与时间装饰器

我试图时间一些代码。首先我使用一个时间装饰:

#!/usr/bin/env python

import time

from itertools import izip

from random import shuffle

def timing_val(func):

def wrapper(*arg, **kw):

'''source: http://www.daniweb.com/code/snippet368.html'''

t1 = time.time()

res = func(*arg, **kw)

t2 = time.time()

return (t2 - t1), res, func.__name__

return wrapper

@timing_val

def time_izip(alist, n):

i = iter(alist)

return [x for x in izip(*[i] * n)]

@timing_val

def time_indexing(alist, n):

return [alist[i:i + n] for i in range(0, len(alist), n)]

func_list = [locals()[key] for key in locals().keys()

if callable(locals()[key]) and key.startswith('time')]

shuffle(func_list) # Shuffle, just in case the order matters

alist = range(1000000)

times = []

for f in func_list:

times.append(f(alist, 31))

times.sort(key=lambda x: x[0])

for (time, result, func_name) in times:

print '%s took %0.3fms.' % (func_name, time * 1000.)

产量

% test.py

time_indexing took 73.230ms.

time_izip took 122.057ms.

在这里我使用timeit:

% python - m timeit - s '' 'alist=range(1000000);[alist[i:i+31] for i in range(0, len(alist), 31)]'

10 loops, best of 3:

64 msec per loop

% python - m timeit - s 'from itertools import izip' 'alist=range(1000000);i=iter(alist);[x for x in izip(*[i]*31)]'

10 loops, best of 3:

66.5 msec per loop

使用timeit的结果几乎是一样的,但是使用时间装饰器,time_indexing比time_izip更快。

什么造成这种差别?

应该相信这两种方法之一?

如果是,哪个?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值