python 性能鸡汤
2014-02-19 17:33
281 查看
转载自:http://www.oschina.net/question/1579_45822 1:使用内建函数 input() int() isinstance() issubclass() iter() open() ord() pow() print() property() 2 使用join()连接字符串 >>> chunk = ['a', 'b', 'c', 'd'] >>> a = '_'.join(chunk) >>> a 'a_b_c_d' 3 使用python多重赋值,交换变量 >>> x = 0 >>> y = 1 >>> z = 2 >>> x, y, z = z, y, x >>> x 2 >>> y 1 >>> z 0 4 尽量使用局部变量(python检索局部变量比全局变量快,意味着要减少使用‘global’) 5 使用延迟加载加速 将‘import’声明移入函数中,仅在需要的时候导入。如果某些模块不需要马上使用,稍后导入他们。 6 为无限循环使用‘while 1’ 如果需要一个无限循环,例如监听套接字实例。while True 可以实现,但 while 1:是单步运算,可以提高性能: 7 使用 list comprehension 更具可读性(函数式编程) >>> evens = [i for i in range(10) if i % 2 == 0] >>> evens [0, 2, 4, 6, 8] 8 使用xrange()处理长序列: 节省内存,因为xrange()在序列每次调用只产生一个整数元素。而range(),它将直接给你一个完整的元素列表,用于循环时会有不必要的开销。 9 使用python generator 节省内存和提高性能,例如一个视频流,你可以一个一个字节的发送,而不是整个流 >>> chunk = (1000 * i for i in xrange(1000)) >>> chunk <generator object <genexpr> at 0x7f12f0073910> >>> chunk.next() 0 >>> chunk.next() 1000 >>> chunk.next() 2000 >>> chunk.next() 3000 10 了解itertools模块 该模块对迭代和组合是非常有效的。例如列出列表[1, 2, 3]的所有排列组合,仅须3行代码 >>> 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)] 11 bisect模块保持序列排序 这是一个免费的二分查找实现和快速插入有序序列的工具。 >>> import bisect >>> list = [1, 4, 7, 9] >>> bisect.insort(list, 5) >>> list [1, 4, 5, 7, 9] 你已将一个元素插入表中,而你不必再次调用sort()来保持容器的排序,因为这在长序列中会非常昂贵。 12 Python中的列表实现并不是以人们通常谈论的计算机科学中的普通单链表实现的。Python中 的列表是一个数组。也就是说,你可以以常量时间O(1) 检索列表的某个元素,而不需要从>头开始搜索。这有什么意义呢? Python开发人员使用列表对象insert()时, 需三思. 例>如:>>> list.insert(0,item) 这个操作很慢 在列表的前面插入一个元素效率不高, 因为列表中的所有后续下标不得不改变. 然而 ,您可以使用list.append()在列表的尾端有效添加元素. 挑先deque,如果你想快速的在两 插入或时。它是快速的,因为在Python中的deque用双链表实现。不再多说。 :) 13 使用dict和set检测成员,因为二者用hash实现。 >>> mylist = ['a', 'b', 'c'] #slower , checkmembership with list >>> 'c' in mylist True >>> myset = set(['a', 'b', 'c']) # faster ,checkmembership with set >>> 'c' in myset True >>> 14 http://caoyaojun1988-163-com.iteye.com/blog/1752627 Schwartzian python lambda表达式:http://developer.51cto.com/art/201301/388431.htm