前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >加速Python列表和字典,让你代码更加高效

加速Python列表和字典,让你代码更加高效

作者头像
HuangWeiAI
发布2020-07-27 15:00:54
6980
发布2020-07-27 15:00:54
举报
文章被收录于专栏:浊酒清味

介绍

今天,我们将讨论Python中的优化技术。在本文中,您将了解如何通过避免在列表和字典中进行重新计算来加快代码的速度。

我们先编写一个装饰器函数来计算函数的执行时间,方便测验不同代码的速度:

代码语言:javascript
复制
import functools
import time

def timeit(func):
    @functools.wraps(func)
    def newfunc(*args, **kwargs):
        startTime = time.time()
        func(*args, **kwargs)
        elapsedTime = time.time() - startTime
        print('function - {}, took {} ms to complete'.format(func.__name__, int(elapsedTime * 1000)))
    return newfunc

避免在列表中重新评估

.append在循环内

代码:

代码语言:javascript
复制
@timeit
def append_inside_loop(limit):
    nums = []
    for num in limit:
        nums.append(num)

append_inside_loop(list(range(1, 9999999)))

在上面的函数中.append每次通过循环重新计算的函数引用。执行后,上述函数所花费的总时间:

代码语言:javascript
复制
o/p - function - append_inside_loop, took 529 ms to complete

.append在循环外

代码:

代码语言:javascript
复制
@timeit
def append_outside_loop(limit):
    nums = []
    append = nums.append
    for num in limit:
        append(num)

append_outside_loop(list(range(1, 9999999)))

在上面的函数中,我们对nums.append在循环外部估值,并在循环内部使用append为变量。总时间:

代码语言:javascript
复制
o/p - function - append_outside_loop, took 328 ms to complete

如您所见,当我们在for循环外部追加为一个本地变量,这将花费更少的时间,可以将代码加速201 ms。

避免在字典中重新求值

在循环内部

代码:

代码语言:javascript
复制
@timeit
def inside_evaluation(limit):
    data = {}
    for num in limit:
        data[num] = data.get(num, 0) + 1

inside_evaluation(list(range(1, 9999999)))

上述函数所花费的总时间:

代码语言:javascript
复制
o/p - function - inside_evaluation, took 1400 ms to complete

在循环外

代码:

代码语言:javascript
复制
@timeit
def outside_evaluation(limit):
    data = {}
    get = data.get
    for num in limit:
        data[num] = get(num, 0) + 1


outside_evaluation(list(range(1, 9999999)))

上述函数所花费的总时间:

代码语言:javascript
复制
o/p - function - outside_evaluation, took 1189 ms to complete

如你所见,我们这里的代码速度提高了211毫秒。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python学会 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档