Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1699523
  • 博文数量: 607
  • 博客积分: 10031
  • 博客等级: 上将
  • 技术积分: 6633
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-30 17:41
文章分类

全部博文(607)

文章存档

2011年(2)

2010年(15)

2009年(58)

2008年(172)

2007年(211)

2006年(149)

我的朋友

分类: Python/Ruby

2008-10-11 22:15:35

性能优化 (Performance tuning) 是一件多姿多彩的事情。
Python
是一种解释性语言并不表示你不应该担心代码优化。但也不必担心。

代码优化是否必要

由于代码优化过程中存在太多的不明确因素,以至于你很难清楚该从何入手。

让我们从这里开始:你真的确信你要这样做吗? 你的代码真的那么差吗?值得花时间去优化它吗?在你的应用程序的生命周期中,与花费在等待一个远程数据库服务器,或是等待用户输入相比,运行这段代码将花费多少时间?

第二,你确信已经完成代码编写了吗? 过早的优化就像是在一块半生不熟的蛋糕上撒糖霜。你花费了几小时、几天(或更长) 时间来优化你的代码以提高性能,却发现它不能完成你希望它做的工作。那是浪费时间。

这并不是说代码优化毫无用处,但是你需要检查一下整个系统,并且确定把时间花在这上面是值得的。在优化代码上每花费一分钟,就意味着你少了增加新功能、编写文档或者陪你的孩子玩或者编写单元测试的一分钟。

哦,是的,单元测试。不必我说,在开始性能优化之前你需要一个完全的单元测试集。你需要的最后一件事情就是在乱动你的算法时引入新的问题。

谨记着这些忠告。

使用timeit模块

你需要知道的最重要问题是,决不要自己编写计时函数。为一个很短的代码计时都很复杂。

Python 具备一个叫做 timeit 的完美计时工具。

import timeit

t=timeit.Timer("soundex.soundex('xyz')", "import soundex") //导入语句以及计时语句

t.timeit(n) //运行n次的耗时,缺省是100万次

t.repeat(3, 200000) //每次测试运行200000次,运行3次测试的耗时

优化正则表达式

就检查一个字符串而言,正则表达式几乎永远不是最好的答案,而且应该被尽可能避开。 这不仅仅是基于性能考虑,而是因为差错和维护都很困难,当然性能也是个原因。

优化字典查找

优化列表操作

优化字符串操作

小结

我希望你有很好的见解:性能并不是一切。 你在优化方面的努力应该与程序的可读性和可维护性相平衡。

  • 如果你要在正则表达式和编写循环间抉择,选择正则表达式。 正则表达式因其是以 C 语言编译的可以本能地在你的计算机上运行,你的循环却以 Python 编写需要通过 Python 解释器运行。
  • 如果你需要在正则表达式和字符串方法间抉择,选择字符串方法。 它们都是以 C 编译的,所以选取简单的。
  • 字典查找的通常应用很快,但是 string.maketrans 之类的特殊函数和 isalpha() 之类的字符串方法更快。如果 Python 有定制方法给你用,就使它吧!
  • 别太聪明了。 有时一些明显的算法是最快的。
  • 不要太迷恋性能优化,性能并不是一切。


阅读(1162) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~