zoukankan      html  css  js  c++  java
  • python 性能鸡汤

    转载自: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




  • 相关阅读:
    CSS 层叠样式表
    一. 图论
    二. log4j配置文件
    三.注解
    3. Map与Tuple
    MappedByteBuffer读写文件
    2. scala中的数组
    1.scala语法
    二. 模式匹配
    一.算法的数学基础
  • 原文地址:https://www.cnblogs.com/i80386/p/3556335.html
Copyright © 2011-2022 走看看