用装饰器来检查deque与list在插入元素与弹出元素方面的效能优势

在python的collections模块中有一个deque的数据结构,它与list类似,具有append()和pop()方法,除此以外,还添加了leftappend()和leftpop()的方法,其运行模型与队列和栈类似,它的好处在与面对大数据量的时候,插入和取出的速度要更快,为了比较直观的感受这种差别,我写了一个简单的装饰器来检查它们在这两方面的差别,装饰器如下

def time_counter(func):
    def wrapper(*args,**kwargs):
        start=time.time()
        func(*args,**kwargs)
        end = time.time()
        print('{method} 程序运行时间:{}'.format(end-start,**kwargs))
    return wrapper

接下来让我们做如下的测试

@time_counter
def deque_func(method):
    if method == 'append':
        q = collections.deque()
        for i in range(1000000):
            q.append(i)
    elif method == 'pop':
        q = collections.deque()
        for i in range(1000):
            q.append(i)
        for i in range(10):
            q.pop()
    else:
        print('only append and pop is accepted')



@time_counter
def list_func(method):
    if method == 'append':
        l = []
        for i in range(1000000):
            l.append(i)
    elif method == 'pop':
        l = []
        for i in range(1000):
            l.append(i)
        for i in range(10):
            l.pop()
    else:
        print('only append and pop is accepted')


deque_func(method='append')
list_func(method='append')

deque_func(method='pop')
list_func(method='pop')

最终的结果如下:

append 程序运行时间:0.06981182098388672
append 程序运行时间:0.09574413299560547
pop 程序运行时间:0.000997304916381836
pop 程序运行时间:0.0009980201721191406

重复几次,都差不多是这样,次数太少感觉感受不到性能的明显优越性,但是太多,我设置十亿次的时候个人电脑会卡住不动...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值