第一部分

1-使用内建函数:

你可以用Python写出高效的代码,但很难击败内建函数. 经查证. 他们非常快速

2-使用 join() 连接字符串.

你可以使用 + 来连接字符串. 但由于string在Python中是不可变的,每一个+操作都会创建一个新的字符串并复制旧内容. 常见用法是使用Python的数组模块单个的修改字符;当完成的时候,使用 join() 函数创建最终字符串.

>>> #This is good to glue a large number of strings
>>> for chunk in input():
>>> my_string.join(chunk)

3-使用Python多重赋值,交换变量

这在Python中即优雅又快速:

>>> x, y = y, x

这样很慢:

>>> temp = x
>>> x = y
>>> y = temp

4-尽量使用局部变量

Python 检索局部变量比检索全局变量快. 这意味着,避免 "global" 关键字.

5-尽量使用 in

使用 in 关键字. 简洁而快速.

>>> for key in sequence:
>>> print “found”

6-使用延迟加载加速

import 声明移入函数中,仅在需要的时候导入. 换句话说,如果某些模块不需马上使用,稍后导入他们. 例如,你不必在一开使就导入大量模块而加速程序启动. 该技术不能提高整体性能. 但它可以帮助你更均衡的分配模块的加载时间.(Tacey注这样就会将模块导入部分分散,不能一眼看出一个脚本导入了那些模块)

7-为无限循环使用 while 1

有时候在程序中你需一个无限循环.(例如一个监听套接字的实例) 尽管 while True 能完成同样的事, 但 while 1 是单步运算. 这招能提高你的Python性能.

>>> while 1:
>>> # do stuff, faster with while 1
>>> while True:
>>> # do stuff, slower with wile True

8-使用list comprehension(列表推导式)

从Python 2.0 开始,你可以使用 list comprehension 取代大量的 forwhile 块. 使用List comprehension通常更快,Python解析器能在循环中发现它是一个可预测的模式而被优化.额外好处是,list comprehension更具可读性(函数式编程),并在大多数情况下,它可以节省一个额外的计数变量。例如,让我们计算1到10之间的偶数个数:

>>> # the good way to iterate a range
>>> evens = [ i for i in range(10) if i%2 == 0]
>>> [0, 2, 4, 6, 8]
>>> # the following is not so Pythonic
>>> i = 0
>>> evens = []
>>> while i < 10:
>>> if i %2 == 0: evens.append(i)
>>> i += 1
>>> [0, 2, 4, 6, 8]

9-使用 xrange() 处理长序列:

这样可为你节省大量的系统内存,因为 xrange() 在序列中每次调用只产生一个整数元素。而相反 range() ,它將直接给你一个完整的元素列表,用于循环时会有不必要的开销。(Tacey注在Python3.x版本中range()xrange()没有区别)

10-使用 Python generator(生成器)

这也可以节省内存和提高性能。例如一个视频流,你可以一个一个字节块的发送,而不是整个流。例如,

>>> chunk = ( 1000 * i for i in xrange(1000))
>>> chunk
<generator object <genexpr> at 0x7f65d90dcaa0>
>>> chunk.next()
0
>>> chunk.next()
1000
>>> chunk.next()
2000

11-了解 itertools 模块:

该模块对迭代和组合是非常有效的。让我们生成一个列表 [1,2,3] 的所有排列组合,仅需三行Python代码:

>>> import itertools
>>> iter = itertools.permutations([1,2,3])
>>> list(iter)
[(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]

12-学习 bisect 模块保持列表排序:

这是一个免费的二分查找实现和快速插入有序序列的工具。也就是说,你可以使用:

>>> import bisect
>>> bisect.insort(list, element)

你已將一个元素插入列表中, 而你不需要再次调用 sort() 来保持容器的排序, 因为这在长序列中这会非常昂贵.

13-理解Python列表,实际上是一个数组

Python中的列表实现并不是以人们通常谈论的计算机科学中的普通单链表实现的。Python中的列表是一个数组。也就是说,你可以以常量时间 O(1) 检索列表的某个元素,而不需要从头开始搜索。这有什么意义呢? Python开发人员使用列表对象 insert() 时, 需三思、。例如:

>>> list.insert(0, item)

在列表的前面插入一个元素效率不高, 因为列表中的所有后续下标不得不改变. 然而,您可以使用 list.append() 在列表的尾端有效添加元素. 挑选 deque ,如果你想快速的在两端插入或删除。它是快速的,因为在Python中的 deque 用双链表实现。不再多说。

Python性能提升小技巧的更多相关文章

  1. 10个提升MySQL性能的小技巧

    从工作量分析到索引的三条规则,这些专家见解肯定会让您的MySQL服务器尖叫. 在所有的关系数据库中,MySQL已经被证明了完全是一头野兽,只要通知停止运行就绝对不会让你多等一秒钟,使你的应用置于困境之 ...

  2. .NET性能优化小技巧

    .NET 性能优化小技巧 Intro 之前做了短信发送速度的提升,在大师的指导下,发送短信的速度有了极大的提升,学到了一些提升 .NET 性能的一些小技巧 HttpClient 优化 关于使用 Htt ...

  3. 开发Android应用 提升性能的小技巧

    前 言 2015年,Android OS 目前在手机操作系统的市场占有率已达59%,权威机构预计,Android市场占有率在2016年将达到63%,由于Android的开放性,未来占有率还将不断增加, ...

  4. How Javascript works (Javascript工作原理) (十一) 渲染引擎及性能优化小技巧

    个人总结:读完这篇文章需要20分钟,这篇文章主要讲解了浏览器中引擎的渲染机制. DOMtree       ----|   |---->  RenderTree CSSOMtree  ----| ...

  5. JavaScript 工作原理之十一-渲染引擎及性能优化小技巧

    原文请查阅这里,略有删减,本文采用知识共享署名 4.0 国际许可协议共享,BY Troland. 本系列持续更新中,Github 地址请查阅这里. 这是 JavaScript 工作原理的第十一章. 迄 ...

  6. Web性能优化系列:10个JavaScript性能提升的技巧

    由 伯乐在线 - Delostik 翻译,黄利民 校稿.未经许可,禁止转载!英文出处:jonraasch.com.欢迎加入翻译小组. Nicholas Zakas是一位 JS 大师,Yahoo! 首页 ...

  7. 关于python性能提升的一些方案(上)

    一.函数调用优化(空间跨度,避免访问内存) 1.大数据求和,使用sum a = range(100000) %timeit -n 10 sum(a) 10 loops, best of 3: 3.15 ...

  8. 我做的python常用的小技巧

    在python编码过程中,总会遇到各种各样的小问题,我想着记录下来,以备查用,总结过去,是为了更好的思考与进步. 一. 去除变量中(标题中)多余的字符 数据处理过程中,遇到这样的情况: y=['月份' ...

  9. python编程常见小技巧

    #主要是记录常见的小问题以及解决办法 ##1.复制的代码,经常出现TAB和空格不一致的情况 将tab或者空格删除,然后重新打出空格或者tab就可以了: ##2.python读取文件,经常出现的编码en ...

随机推荐

  1. Android Studio 1.0.2项目实战——从一个APP的开发过程认识Android Studio

    Android Studio 1.0.1刚刚发布不久,谷歌紧接着发布了Android Studio 1.0.2版本,和1.0.0一样,是一个Bug修复版本.在上一篇Android Studio 1.0 ...

  2. 用手机访问本地环境的利器ngrok

    我们在调试移动端页面,尤其是调试微信页面的时候,会遇到这样的情况,手机连着公司的wifi,开发环境(台式机)插着公司的网线,我们要用手机来访问开发环境下的页面.这个时候,如果网线和wifi是在同一个网 ...

  3. [ZigBee] 6、ZigBee基础实验——定时器3和定时器4(8 位定时器)

    上一节讲了16位定时器1,本节讲8位定时器3和定时器4! 1.综述 Timer 3 and Timer 4 are two 8-bit timers(8位定时器). Each timer has tw ...

  4. 为什么我的新项目选择了Quick-cocos2d-x

    混Quick社区快一周了,还是决定分享一下我选择Quick的原因. 一是向大家介绍一下我自己,同时也希望给大家提供一个参考首先,向大家介绍一下我自己姓名,年龄,性别这些都不重要了.我是一名程序员,在游 ...

  5. Web语义化

    在昨天和做SEO的同学聊了一会儿,当然我没有学会搜索引擎优化的技巧和知识,但在此之前一直对HTML5中header.footer.sidebar.article等标签嗤之以鼻,觉得这个和div没有什么 ...

  6. redis系列-redis的持久化

    redis对数据的持久化有两种方式:RDB(快照保存)和AOF(命令日志). RDB 介绍:将内存快照保存到磁盘,dump.rdb二进制文件 触发:满足“N 秒内数据集至少有 M 个改动”,或使用sa ...

  7. 趣味C程序-HelloWord

    说明:刚才写了一个基础的helloWord程序(很早以前从其他地方收集的.),本以为群里面的人是可以答对了,但是我错了,没有人.他们的错误往往被程序的外表给蒙蔽了. 很多人的回答是0.如果你仔细看的话 ...

  8. Git Day01,仓库,commit,版本切换

    1st,创建版本库:  2nd,添加文件:  3rd,修改文件,并提交: 4th,版本切换:git log查看版本:版本回退: 又回到原始版本了: 回到“未来”: 今天就到这里,明天继续.Git确实挺 ...

  9. [翻译]AKKA笔记 - LOGGING与测试ACTORS -2 (二)

    3.THROW IN A LOGBACK.XML 现在我们把SLF4J日志配置在logback. <?xml version="1.0" encoding="UTF ...

  10. java arraylist的问题

    不得不说,我犯了错,很基础的.. 遍历list的时候可以删除数组元素吗? 答案是:简单/增强for循环不可以,list.iterator()这样的方式就可以. 我之前做过类似面试题的,不过忘记了, 不 ...