python get()函数_加速Python列表和字典,让你代码更加高效

2517ee5a1df69b1f9bf290e6add6e563.png

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

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

import functoolsimport timedef 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
避免在列表中重新评估

在循环内

代码:

@timeitdefappend_inside_loop(limit):    nums = []    for num in limit:        nums.append(num)append_inside_loop(list(range(1, 9999999)))

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

o/p - function - append_inside_loop, took 529 ms to complete

在循环外

代码:

@timeitdef append_outside_loop(limit):    nums = []    append = nums.append    for num in limit:        append(num)append_outside_loop(list(range(1, 9999999)))

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

o/p - function - append_outside_loop, took 328 ms to complete

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

避免在字典中重新求值

在循环内部

代码:

@timeitdef inside_evaluation(limit):    data = {}    for num in limit:        data[num] = data.get(num, 0) + 1inside_evaluation(list(range(1, 9999999)))

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

o/p - function - inside_evaluation, took 1400 ms to complete

在循环外

代码:

@timeitdef outside_evaluation(limit):    data = {}    get = data.get    for num in limit:        data[num] = get(num, 0) + 1outside_evaluation(list(range(1, 9999999)))

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

o/p - function - outside_evaluation, took 1189 ms to complete

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

- END -

英文原文: https://dev.to/sharmapacific/speedup-python-list-and-dictionary-12

文源网络,仅供学习之用。如有侵权,联系删除。

往期精彩

9ee11489be55aa152f2900f46004fb62.png

◆  50款开源工具你都用过吗?

◆  python+C、C++混合编程的应用

◆  python网络爬虫的基本原理详解

◆  Python自动操控excel,一小时解决你一天的工作

◆  如何用Python增强Excel,减少处理复杂数据的痛苦?

9b5336fd243e27a7119d6631396fd7a3.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值