如何加速Python列表和字典让你的代码更加高效

 介绍

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

创新互联是一家专业提供靖江企业网站建设,专注与网站设计制作、网站设计HTML5、小程序制作等业务。10年已为靖江众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。

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

 
 
 
 
  1. import functools
  2. import time
  3. def timeit(func):
  4.     @functools.wraps(func)
  5.     def newfunc(*args, **kwargs):
  6.         startTime = time.time()
  7.         func(*args, **kwargs)
  8.         elapsedTime = time.time() - startTime
  9.         print('function - {}, took {} ms to complete'.format(func.__name__, int(elapsedTime * 1000)))
  10.     return newfunc

避免在列表中重新评估

在循环内

代码:

 
 
 
 
  1. @timeit
  2. def append_inside_loop(limit):
  3.     nums = []
  4.     for num in limit:
  5.         nums.append(num)
  6. append_inside_loop(list(range(1, 9999999)))

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

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

在循环外

代码:

 
 
 
 
  1. @timeit
  2. def append_outside_loop(limit):
  3.     nums = []
  4.     append = nums.append
  5.     for num in limit:
  6.         append(num)
  7. append_outside_loop(list(range(1, 9999999)))

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

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

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

避免在字典中重新求值

在循环内部

代码:

 
 
 
 
  1. @timeit
  2. def inside_evaluation(limit):
  3.     data = {}
  4.     for num in limit:
  5.         data[num] = data.get(num, 0) + 1
  6. inside_evaluation(list(range(1, 9999999)))

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

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

在循环外

代码:

 
 
 
 
  1. @timeit
  2. def outside_evaluation(limit):
  3.     data = {}
  4.     get = data.get
  5.     for num in limit:
  6.         data[num] = get(num, 0) + 1
  7. outside_evaluation(list(range(1, 9999999)))

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

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

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

标题名称:如何加速Python列表和字典让你的代码更加高效
文章URL:http://www.shufengxianlan.com/qtweb/news31/241131.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联