您的位置:首页 > 编程语言 > Python开发

优化Python程序性能的15个小技巧

2014-04-06 17:08 344 查看
如果你已经熟悉Python,本文介绍的小技巧将在优化Python程序的性能方面有一定作用。

1、使用profile和timeit模块来测试程序的性能。

2、减少函数调用的次数。
如果需要对一个list的每个元素进行操作,那就把整个list传入函数,而不是一个一个元素分别传入函数。

3、用xrange来替代range。
xrange是range的C语言实现,在性能上较好。

4、对大数据处理时,使用numpy中的数据结构和运算。

5、字符串连接时,使用 “”.join(string),要比+和+=的销量高。

6、while 1要比while True的速度快。

7、对于list的处理,列表解析要比for循环快,for循环要比while循环快。
A = [x for x in range(10)]

A = []
for x in range(10):
     A.append(x)

x = 0
C = []
while x < 10:
     C.append(x)
     x += 1

8、使用C语言版本的模块。
比如cProfile, cStringIO , cPickle

9、访问局部变量要比全局变量、内置对象快。

10、使用itertools模块,它提供了各种迭代方法。

11、尝试使用Map, Reduce, Filter来代替循环。
Map的用法:map(函数, 序列),对于序列中规定每个元素,调用函数,把所有返回值放到一个list中。
>>> map(lambda x: x*x, range(1, 11))
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

Reduce的用法:reduce(函数, 序列),将序列中的元素依据函数的操作合并起来,最终返回一个结果。
>>> reduce(lambda x,y : x+y, range(1, 11))
55

Filter的用法:filter(函数, 序列),依据函数的返回值过滤序列中的元素,函数返回真(非0)则保留元素,返回假(0)则不保留。
>>> filter(lambda x: x%3==0, range(1, 11))
[3, 6, 9]

12、对于判断元素元素存在性的问题,使用set或者dict作为数据结构要比线性的list/tuple查询速度快。

13、不可变类型要比可变类型的访问速度快。
不可变类型:int,string,float,tuple
可变类型:list,dictionary

14、对list的插入操作是O(n)时间复杂度的,如果要频繁进行列表头尾不的添删操作,推荐使用deque,双端队列。

15、垃圾回收机制不是万能的,可以使用del来删除对象。

本文翻译自下面的地址,内容上有修改。
原文地址:http://infiniteloop.in/blog/quick-python-performance-optimization-part-i/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: