为什么Python代码使用len()函数而不是length方法?
我知道python有一个__len__()函数,用于确定字符串的大小,但我想知道为什么它不是字符串对象的方法。
更新
好吧,我意识到我很尴尬。 __len__()实际上是一个字符串对象的方法。 使用字符串对象上的len函数在Python中看到面向对象的代码似乎很奇怪。 此外,看到__len__作为名称而不仅仅是len也很奇怪。
8个解决方案
167 votes
字符串确实有一个长度方法:__iter__()
Python中的协议是在具有长度的对象上实现此方法,并使用内置的__iter__()函数,它为您调用它,类似于您实现__iter__()的方式并使用内置的iter()函数(或具有 对于可迭代的对象,在幕后调用的方法。
有关更多信息,请参阅模拟容器类型。
以下是关于Python协议主题的很好的阅读:Python和最小惊讶原则
Jonny Buchanan answered 2019-03-23T18:03:31Z
83 votes
吉姆对这个问题的回答可能有所帮助; 我把它复制在这里。 引用Guido van Rossum:
首先,为了HCI的原因,我选择了len(x)而不是x.len()(def __len __()来得晚了)。 实际上有两个相互交织的原因,都是人机交互:
(a)对于某些操作,前缀表示法只比读后缀更好 - 前缀(和中缀!)操作在数学中有悠久的传统,它喜欢视觉效果帮助数学家思考问题的符号。 比较我们将x *(a + b)这样的公式重写为xa + xb的简单性与使用原始OO表示法