Python性能提升的一些技巧(持续更新)

维生素茜 · · 1436 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

一般编程语言性能比较这个网站比较有说服力http://benchmarksgame.alioth.debian.org/u64q/ruby.html,现在的情况是python的速度在比较列表编程语言中属于垫底的,但是这并不是说python不可取,pytthon慢到不能工作,通过一些简单的优化和编码规范python的速度还是不错的,整天挂在嘴边python性能不行的都是小白,你要做的系统需要百万并发吗?需要误差在10毫秒内的实时交易吗?需要千万级别服务器端口扫描吗?需要DDOS级别的压力测试吗?需要几个小时内一亿次的弱密码爆破吗?如果你需要,一亿级别爆破和生产环境中的10000QPS个人都用python+c扩展的方式实现过,我可以帮你。

其实绝大多是场景python都能很好的工作,一些对性能要求比较高的场景通过python+c扩展的形式都是可以搞定的,而且省时省力。

以前群里总有个成员成天埋怨,python性能怎么差,自己用起来怎么费力,而不去寻找性能瓶颈在哪儿怎么去做优化。要记住,自己菜逼,怪编程语言是没有用的,这就像蹲坑拉屎,便秘拉不出来,说马桶这个地方地球吸引力太小,听说后来那位朋友去学scala了,还有人说他去学golang了,祝他早日找到自己心中的完美语言。

  1. python的编码规范
  • 用生成器和列表推导式
  • 字符串连接如果数量在3个或3个以内,直接用+号,超过3个,用format或者join,join最好,但format和join差别不是很大
  • 不要写递归代码,尾递归也不行,改成循环的形式
  • tuple能解决问题就不要用list,同样set能解决问题就不要用dict,但是dict和list相比,dict速度飞快,就是内存占用大。但是不要刻意去把list转为tuple。
  • 函数能用局部变量,就不要用全局变量
  • 交换变量用pythonic的方式,a,b=b,a就这样
  • map有时候可以代替循环,这个时候应该毫不犹豫的使用map
  • 在循环内部尽量减少不必要的非循环步骤
  • 用while 1别用while True
  • 多个变量值比较的时候可以用a<b<c,a<b<c比a<b and b<c效率更高
  • 计算x的y次幂用x**y,别用pow,难读速度还慢
  • cpu密集计算别用python,即使要用,也要选择numpy之类的库,最好把cpu密集部分改成C代码,然后ctypes调用,cpu密集部分也不推荐cython,总之C扩展>numpy=cython>python
    有些规范和语言无关,就是用C如果你的程序逻辑有问题,还是会慢。

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:维生素茜

查看原文:Python性能提升的一些技巧(持续更新)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1436 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传