简单的回答
为什么在 Python 中使用的是 len(a) 而不是 a.len() ?
这个问题可以由一句话来解答:len() 并不是普通方法。
len 是一个特殊的方法
展开来说,Python 是一个多范式语言,而 len() 被设计成一个全局的内置函数(builtin function)。
在大部分情况下,对一个对象 a 使用 len(a) 会调用 a.__len__();但如果 a 是一个内置类型的实例(如 str、list、memoryview),那么 len(a) 的速度会非常快。背后的原因是 CPython 会直接从一个 C 结构体里读取对象的长度,完全不会调用任何方法。
效率和一致性的平衡
len 是个特殊方法,这让我们不但可以让 Python 自带的数据结构快速返回结果,并也可以把它应用于自定义的数据类型。
参考:《流畅的Python》