Skip to content

Instantly share code, notes, and snippets.

@zhenyi2697
Created March 29, 2013 10:35
Show Gist options
  • Save zhenyi2697/5270113 to your computer and use it in GitHub Desktop.
Save zhenyi2697/5270113 to your computer and use it in GitHub Desktop.
Python: 代码优化技巧

##Python 代码优化常见技巧

###改进算法,选择合适的数据结构

  • 使用dict的查找要比list快很多

  • 当要求list的交集时,转化成set来计算比较快。set的常见操作:

    union: set(list1) | set(list2)
    intersection: set(list1) & set(list2)
    difference: set(list1) - set(list2)

  • 尽量减少循环嵌套层数,把运算尽量移到上层循环之中

  • 充分利用lazy-evaluation特性:比如if的判断

###字符串的优化

  • 使用join而不是+进行字符串拼接
  • 处理字符串时首选内置函数,不如str.isdigit(), atr.startswith()
  • 对字符串进行格式化输出比直接串联更快速

###使用list comprehension和generator expression

###其他技巧

  • 如果需要交换两个变量的值使用 a,b=b,a 而不是借助中间变量 t=a;a=b;b=t
  • 在循环的时候使用 xrange 而不是 range;使用 xrange 可以节省大量的系统内存,因为 xrange() 在序列中每次调用只产生一个整数元素。而 range() 將直接返回完整的元素列表,用于循环时会有不必要的开销
  • 使用局部变量,避免"global" 关键字。python 访问局部变量会比全局变量要快得多,因 此可以利用这一特性提升性能
  • if done is not None 比语句 if done != None 更快
  • 在耗时较多的循环中,可以把函数的调用改为内联的方式
  • 使用级联比较 "x < y < z" 而不是 "x < y and y < z";
  • while 1 要比 while True 更快(当然后者的可读性更好);
  • build in 函数通常较快,add(a,b) 要优于 a+b。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment