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

发表于:2020-5-21 09:48  作者:佚名   来源:机器学习与数据分析

字体: | 上一篇 | 下一篇 |我要投稿 | 推荐标签: Python

  介绍
  今天,我们将讨论Python中的优化技术。在本文中,您将了解如何通过避免在列表和字典中进行重新计算来加快代码的速度。
  加速Python列表和字典,让你代码更加高效
  我们先编写一个装饰器函数来计算函数的执行时间,方便测验不同代码的速度:

   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
  避免在列表中重新评估
  在循环内
  代码:
   @timeit
  def append_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
  在循环外
  代码:
   @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为变量。总时间:
 o/p - function - append_outside_loop, took 328 ms to complete
  如您所见,当我们在?for循环外部追加为一个本地变量,这将花费更少的时间,可以将代码加速201 ms。?
  避免在字典中重新求值
  在循环内部
  代码:
   @timeit
  def inside_evaluation(limit):
  data = {}
  for num in limit:
  data[num] = data.get(num, 0) + 1
  inside_evaluation(list(range(1, 9999999)))
  上述函数所花费的总时间:
 o/p - function - inside_evaluation, took 1400 ms to complete
  在循环外
  代码:
   @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)))
  上述函数所花费的总时间:
 o/p - function - outside_evaluation, took 1189 ms to complete
  如你所见,我们这里的代码速度提高了211毫秒。

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理

评 论

论坛新帖

顶部 底部


建议使用IE 6.0以上浏览器,800×600以上分辨率,法律顾问:上海瀛东律师事务所 张楠律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2020, 沪ICP备05003035号
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪公网安备 31010102002173号

51Testing官方微信

51Testing官方微博

扫一扫 测试知识全知道