前几天,我需要实现一个关键字匹配功能,即通过判断一句话中是否含有关键字库中的某个关键字。于是我花了很多功夫去思考应该如何做才能做到简单而高效,后面还越想越复杂。不过,最终我回归到一个最原始的方法,for迭代。
最初,我一直觉得for...in不大靠谱,直到我对其做了个简单的测试,拿一个包含20万个关键字的列表运行类似上面的代码并计时,发现其平均耗时在0.02s的样子,并且我笔记本的CPU还不怎么给力。再加上实际中,我这里的keywords会远远少于测试中的20万个。那这样简单的代码在一定程度上其实完全能满足性能的需求。
其实我想表达的是有时我们并不用想得过于复杂化,从简单着手,用实践去分析性能,最终选择最合适的实现方式,这在某些情况下会是一个好的过程。
反过来,对于已经实现的代码,应该通过性能分析去发现问题,找到瓶颈点,然后优化代码。这也是非常值得去做的。
推荐一篇文章《A guide to analyzing Python performance》,其中介绍了从程序运行速度、速度瓶颈、内存使用和内存溢出等方面的一些性能分析的方法和工具。值得阅读一下。