为什么Python代码使用len()函数而不是length方法?

我知道python有一个len()用于确定字符串大小的函数,但我想知道为什么它不是字符串对象的方法。


更新

好吧,我意识到我很尴尬。__len__()实际上是一个字符串对象的方法。使用字符串对象上的len函数在Python中看到面向对象的代码似乎很奇怪。此外,__len__将名称视为名称而不仅仅是len 也是奇怪的。


慕田峪7331174
浏览 4518回答 3
3回答

慕桂英3389331

字符串确实有一个长度方法: __len__()Python中的协议是在具有长度的对象上实现此方法,并使用内置len()函数为您调用它,类似于您实现__iter__()和使用内置iter()函数的方式(或者使用后面的方法)对于可迭代的对象,你的场景。有关更多信息,请参阅模拟容器类型。以下是关于Python协议主题的很好的阅读:Python和最小惊讶原则

繁花如伊

吉姆对这个问题的回答可能有所帮助; 我把它复制在这里。引用Guido van Rossum:首先,为了HCI的原因,我选择了len(x)而不是x.len()(def __len __()来得晚了)。实际上有两个相互交织的原因,都是人机交互:(a)对于某些操作,前缀表示法只比读后缀更好 - 前缀(和中缀!)操作在数学中有悠久的传统,它喜欢视觉效果帮助数学家思考问题的符号。比较我们将x *(a + b)等公式重写为x a + x b的简单性,以及使用原始OO表示法做同样事情的笨拙。(b)当我读到代码为len(x)的代码时,我知道它是在询问某些东西的长度。这告诉我两件事:结果是一个整数,参数是某种容器。相反,当我读取x.len()时,我必须知道x是某种实现接口的容器,或者是从具有标准len()的类继承的。当没有实现映射的类具有get()或keys()方法,或者不是文件的类具有write()方法时,见证我们偶尔会遇到的混淆。用另一种方式说同样的事情,我认为'len'是一种内置操作。我不想失去那个。/ ...... /
打开App,查看更多内容
随时随地看视频慕课网APP