Python性能调优的十个小技巧总结

1 多多使用列表生成式

替换下面代码:

cube_numbers = []
  for n in range(0,10):
    if n % 2 == 1:
      cube_numbers.append(n**3)

为列表生成式写法:

cube_numbers = [n**3 for n in range(1,10) if n%2 == 1]

2 内置函数

尽可能多使用下面这些内置函数:

3 尽可能使用生成器

单机处理较大数据量时,生成器往往很有用,因为它是分小片逐次读取,最大程度节省内存,如下网页爬取时使用yield

import requests
import re

def get_pages(link):
  pages_to_visit = []
  pages_to_visit.append(link)
  pattern = re.compile('https?')
  while pages_to_visit:
    current_page = pages_to_visit.pop(0)
    page = requests.get(current_page)
    for url in re.findall('<a href="([^" rel="external nofollow" ]+)">', str(page.content)):
      if url[0] == '/':
        url = current_page + url[1:]
      if pattern.match(url):
        pages_to_visit.append(url)
    # yield
    yield current_page
webpage = get_pages('http://www.example.com')
for result in webpage:
  print(result)

4 判断成员所属关系最快的方法使用 in

for name in member_list:
  print('{} is a member'.format(name))

5 使用集合求交集

替换下面代码:

a = [1,2,3,4,5]
b = [2,3,4,5,6]

overlaps = []
for x in a:
  for y in b:
    if x==y:
      overlaps.append(x)

print(overlaps)

修改为set和求交集:

a = [1,2,3,4,5]
b = [2,3,4,5,6]

overlaps = set(a) & set(b)

print(overlaps)

6 多重赋值

Python支持多重赋值的风格,要多多使用

first_name, last_name, city = "Kevin", "Cunningham", "Brighton"

7 尽量少用全局变量

Python查找最快、效率最高的是局部变量,查找全局变量相对变慢很多,因此多用局部变量,少用全局变量。

8 高效的itertools模块

itertools模块支持多个迭代器的操作,提供最节省内存的写法,因此要多多使用,如下求三个元素的全排列:

import itertools
iter = itertools.permutations(["Alice", "Bob", "Carol"])
list(iter)

9 lru_cache 缓存

位于functools模块的lru_cache装饰器提供了缓存功能,如下结合它和递归求解斐波那契数列第n:

import functools

@functools.lru_cache(maxsize=128)
def fibonacci(n):
  if n == 0:
    return 0
  elif n == 1:
    return 1
  return fibonacci(n - 1) + fibonacci(n-2)

因此,下面的递归写法非常低效,存在重复求解多个子问题的情况:

def fibonacci(n):
  if n == 0: # There is no 0'th number
    return 0
  elif n == 1: # We define the first number as 1
    return 1
  return fibonacci(n - 1) + fibonacci(n-2)

10 内置函数、key和itemgetter

上面提到尽量多使用内置函数,如下对列表排序使用keyoperator.itemgetter

import operator
my_list = [("Josh", "Grobin", "Singer"), ("Marco", "Polo", "General"), ("Ada", "Lovelace", "Scientist")]
my_list.sort(key=operator.itemgetter(0))
my_list

技术交流

欢迎转载、收藏、有所收获点赞支持一下!

到此这篇关于Python性能调优的十个小技巧总结的文章就介绍到这了,更多相关Python 性能调优内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python 性能优化技巧总结

    1.使用测量工具,量化性能才能改进性能,常用的timeit和memory_profiler,此外还有profile.cProfile.hotshot等,memory_profiler用了psutil,所以不能跟踪cpython的扩展: 2.用C来解决费时的处理,c是效率的代名词,也是python用来解决效率问题的主要途径,甚至有时候我都觉得python是c的完美搭档.常用的是Cython,直接把py代码c化然后又能像使用py包一样使用,其次是ctypes,效率最最高的存在,最后还有CPython

  • 提升Python程序性能的7个习惯

    掌握一些技巧,可尽量提高Python程序性能,也可以避免不必要的资源浪费. 1.使用局部变量 尽量使用局部变量代替全局变量:便于维护,提高性能并节省内存. 使用局部变量替换模块名字空间中的变量,例如 ls = os.linesep.一方面可以提高程序性能,局部变量查找速度更快:另一方面可用简短标识符替代冗长的模块变量,提高可读性. 2.减少函数调用次数 对象类型判断时,采用isinstance()最优,采用对象类型身份(id())次之,采用对象值(type())比较最次. 判断变量num是否为整

  • Python性能分析工具Profile使用实例

    这篇文章主要介绍了Python性能分析工具Profile使用实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码优化的前提是需要了解性能瓶颈在什么地方,程序运行的主要时间是消耗在哪里,对于比较复杂的代码可以借助一些工具来定位,python 内置了丰富的性能分析工具,如 profile,cProfile 与 hotshot 等.其中 Profiler 是 python 自带的一组程序,能够描述程序运行时候的性能,并提供各种统计帮助用户定位程序

  • python如何做代码性能分析

    上一篇文章我们介绍了基准测试,通过基准测试可以发现程序变慢了,那么是因为什么原因导致性能变慢的,需要进一步做代码性能分析.python同样提供了性能分析工具. cProfile cProfile是python默认的性能分析器,他只测量CPU时间,并不关心内存消耗和其他与内存相关联的信息. from time import sleep import random def random_list(start, end, length): """ 生成随机列表 :param sta

  • Python性能提升之延迟初始化

    所谓类属性的延迟计算就是将类的属性定义成一个property,只在访问的时候才会计算,而且一旦被访问后,结果将会被缓存起来,不用每次都计算.构造一个延迟计算属性的主要目的是为了提升性能 property 在切入正题之前,我们了解下property的用法,property可以将属性的访问转变成方法的调用. class Circle(object): def __init__(self, radius): self.radius = radius @property def area(self):

  • python一些性能分析的技巧

    当我们开始精通编程语言时,我们不仅希望实现最终目标,而且希望使我们的程序高效. 在这个教程中,我们将学习一些Ipython的命令,这些命令可以帮助我们对Python代码进行时间分析. 注意,在本教程中,我建议使用Anaconda. 1.分析一行代码 要检查一行python代码的执行时间,请使用 %timeit .下面是一个简单的例子来了解它的工作原理: #### magics命令%timeit的简单用法 %timeit [num for num in range(20)] #### 输出 1.0

  • python 性能提升的几种方法

    关于python 性能提升的一些方案. 一.函数调用优化(空间跨度,避免访问内存) 程序的优化核心点在于尽量减少操作跨度,包括代码执行时间上的跨度以及内存中空间跨度. 1.大数据求和,使用sum a = range(100000) %timeit -n 10 sum(a) 10 loops, best of 3: 3.15 ms per loop %%timeit ...: s = 0 ...: for i in a: ...: s += i ...: 100 loops, best of 3:

  • Python内置类型性能分析过程实例

    这篇文章主要介绍了Python内置类型性能分析过程实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 timeit模块 timeit模块可以用来测试一小段Python代码的执行速度. Timer是测量小段代码执行速度的类. class timeit.Timer(stmt='pass', setup='pass', timer=<timer function>) stmt参数是要测试的代码语句(statment): setup参数是运行代码时需

  • Python性能调优的十个小技巧总结

    1 多多使用列表生成式 替换下面代码: cube_numbers = [] for n in range(0,10): if n % 2 == 1: cube_numbers.append(n**3) 为列表生成式写法: cube_numbers = [n**3 for n in range(1,10) if n%2 == 1] 2 内置函数 尽可能多使用下面这些内置函数: 3 尽可能使用生成器 单机处理较大数据量时,生成器往往很有用,因为它是分小片逐次读取,最大程度节省内存,如下网页爬取时使用

  • 十分简单易懂的Java应用程序性能调优技巧分享

    大多数开发人员理所当然地以为性能优化很复杂,需要大量的经验和知识.好吧,不能说这是完全错误的.优化应用程序以获得最佳性能不是一件容易的事情.但是,这并不意味着如果你不具备这些知识,就不能做任何事情.这里有11个易于遵循的建议和最佳实践可以帮助你创建一个性能良好的应用程序. 大部分建议是针对Java的.但也有若干建议是与语言无关的,可以应用于所有应用程序和编程语言.在讨论专门针对Java的性能调优技巧之前,让我们先来看看通用技巧. 1.在你知道必要之前不要优化 这可能是最重要的性能调整技巧之一.你

  • 分享Java性能调优的11个实用技巧

    大多数开发人员认为性能优化是个比较复杂的问题,需要大量的经验和知识.是的,这并不没有错.诚然,优化应用程序以获得最好的性能并不是一件容易的事情,但这并不意味着你在没有获得这些经验和知识之前就不能做任何事.下面有几个很容易遵循的建议和最佳实践能够帮你创建一个性能良好的应用程序. 这些建议中的大多数都是基于Java的,但是也不一定,也有一些是可以应用于所有的应用程序和编程语言的.在我们分享基于Java的性能调优技巧之前,让我们先讨论一下这些通用的性能调优技巧. 1.在必要之前,先不要优化 这可能是最

  • web性能优化之javascript性能调优

    JavaScript 是一个比较完善的前端开发语言,在现今的 web 开发中应用非常广泛,尤其是对 Web 2.0 的应用.随着 Web 2.0 越来越流行的今天,我们会发现:在我们的 web 应用项目中,会有大量的 JavaScript 代码,并且以后会越来越多.JavaScript 作为一个解释执行的语言,以及它的单线程机制,决定了性能问题是 JavaScript 的软肋,也是 web 软件工程师们在写 JavaScript 需要高度重视的一个问题,尤其是针对 Web 2.0 的应用.绝大多

  • 10个MySQL性能调优的方法

    MYSQL 应该是最流行了 WEB 后端数据库.WEB 开发语言最近发展很快,PHP, Ruby, Python, Java 各有特点,虽然 NOSQL 最近越來越多的被提到,但是相信大部分架构师还是会选择 MYSQL 来做数据存储. MYSQL 如此方便和稳定,以至于我们在开发 WEB 程序的时候很少想到它.即使想到优化也是程序级别的,比如,不要写过于消耗资源的 SQL 语句.但是除此之外,在整个系统上仍然有很多可以优化的地方. 1. 选择合适的存储引擎: InnoDB 除非你的数据表使用来做

  • Android性能调优利器StrictMode应用分析

    作为Android开发,日常的开发工作中或多或少要接触到性能问题,比如我的Android程序运行缓慢卡顿,并且常常出现ANR对话框等等问题.既然有性能问题,就需要进行性能优化.正所谓工欲善其事,必先利其器.一个好的工具,可以帮助我们发现并定位问题,进而有的放矢进行解决.本文主要介绍StrictMode 在Android 应用开发中的应用和一些问题. 什么是StrictMode StrictMode意思为严格模式,是用来检测程序中违例情况的开发者工具.最常用的场景就是检测主线程中本地磁盘和网络读写

  • SQL Server 性能调优之查询从20秒至2秒的处理方法

    一.需求 需求很简单,就是需要查询一个报表,只有1个表,数据量大约60万左右,但是中间有些逻辑. 先说明一下服务器配置情况:1核CPU.2GB内存.机械硬盘.Sqlserver 2008 R2.Windows Server2008 R2 SP1和阿里云的服务器,简单说就是阿里云最差的服务器. 1.原始表结构 非常简单的一张表,这次不讨论数据冗余和表字段的设计,如是否可以把Project和Baojian提出成一个表等等,这个是原始表结构,这个目前是没有办法改变的. 2.查询的sql语句为 sele

  • 关于MySQL性能调优你必须了解的15个重要变量(小结)

    前言: MYSQL 应该是最流行了 WEB 后端数据库.虽然 NOSQL 最近越来越多的被提到,但是相信大部分架构师还是会选择 MYSQL 来做数据存储.本文作者总结梳理MySQL性能调优的15个重要变量,又不足需要补充的还望大佬指出. 1.DEFAULT_STORAGE_ENGINE 如果你已经在用MySQL 5.6或者5.7,并且你的数据表都是InnoDB,那么表示你已经设置好了.如果没有,确保把你的表转换为InnoDB并且设置default_storage_engine为InnoDB. 为

  • JVM性能调优实战:让你的IntelliJ Idea纵享丝滑

    本文已被Github仓库收录 https://github.com/silently9527/JavaCore 前言 在前面整理了一篇关于JVM故障诊断和处理工具,考虑到大部分的Java程序员都使用的是IntelliJ Idea,本篇就使用工具来实战演练对IntelliJ Idea运行速度调优 调优前的运行状态 原始配置内容 要查询idea原始配置文件的路径可以在VisualVM中的概述中查看 原始配置内容: -XX:ReservedCodeCacheSize=240m -XX:+UseComp

  • Python中关于property使用的小技巧

    目录 property属性 具体实例 property属性的有两种方式 装饰器方式 旧式类 新式类 类属性方式 property对象与@property装饰器对比 property对象类属性 @property装饰器 property属性 一种用起来像是使用实例属性一样的特殊属性,可以对应于某个方法 既要保护类的封装特性,又要让开发者可以使用 对象.属性 的方式操作方法,@property 装饰器,可以直接通过方法名来访问方法,不需要在方法名后添加一对 () 小括号. 来看下求圆的面积的例子 c

随机推荐