无需手动缓存长度

2016/7/27 17:13 下午 posted in  Python

今天在阅读《机器学习实战》的时候,看到了这样一句描述

IMG_0629

其中数据集是一个List。看到这里说到为了提高代码效率,特地开了一个变量来保存其长度。

我回忆起以前调试bug的时候,总是能看到List对象里面有一个函数__len__,想必Python对于这种常用函数会有所优化,对于这种集合类型的对象,如果对其长度进行缓存,这样多次调用len函数,就不会重复进行遍历计算了。这么简单的优化,Python必然是有做的。

于是去Google,原本准备搜len函数的具体实现代码,结果直接找到stackoverflow有相关问题,明确的验证了我的想法。

屏幕快照 2016-07-27 18.44.21

对于这种类型,Python都会对其长度进行缓存。也就是说,对于len函数,只在第一次调用的时候复杂度为O(N),后续调用的复杂度都是常数级的。所以,我们平时写代码的时候,可以不需要多此一举的再开一个单独的变量来缓存了。也就是说,以下代码在没有特殊需求的情况下,是多此一举的:

l = len(some_list)