分类: Python/Ruby
2008-10-11 22:15:35
由于代码优化过程中存在太多的不明确因素,以至于你很难清楚该从何入手。
让我们从这里开始:你真的确信你要这样做吗? 你的代码真的那么差吗?值得花时间去优化它吗?在你的应用程序的生命周期中,与花费在等待一个远程数据库服务器,或是等待用户输入相比,运行这段代码将花费多少时间?
第二,你确信已经完成代码编写了吗? 过早的优化就像是在一块半生不熟的蛋糕上撒糖霜。你花费了几小时、几天(或更长) 时间来优化你的代码以提高性能,却发现它不能完成你希望它做的工作。那是浪费时间。
这并不是说代码优化毫无用处,但是你需要检查一下整个系统,并且确定把时间花在这上面是值得的。在优化代码上每花费一分钟,就意味着你少了增加新功能、编写文档或者陪你的孩子玩或者编写单元测试的一分钟。
哦,是的,单元测试。不必我说,在开始性能优化之前你需要一个完全的单元测试集。你需要的最后一件事情就是在乱动你的算法时引入新的问题。
谨记着这些忠告。
使用timeit模块
你需要知道的最重要问题是,决不要自己编写计时函数。为一个很短的代码计时都很复杂。
Python 具备一个叫做 timeit 的完美计时工具。
import timeit
t=timeit.Timer("soundex.soundex('xyz')", "import soundex") //导入语句以及计时语句
t.timeit(n) //运行n次的耗时,缺省是100万次
t.repeat(3, 200000) //每次测试运行200000次,运行3次测试的耗时
优化正则表达式
就检查一个字符串而言,正则表达式几乎永远不是最好的答案,而且应该被尽可能避开。 这不仅仅是基于性能考虑,而是因为差错和维护都很困难,当然性能也是个原因。
优化字典查找
优化列表操作
优化字符串操作
小结
我希望你有很好的见解:性能并不是一切。 你在优化方面的努力应该与程序的可读性和可维护性相平衡。