擅长:python、mysql、java
<p>你会发现很多类似的例子-比如用<code>len(obj)</code>代替<code>obj.length()</code>,<code>hash(obj)</code>而不是{<cd4>},<code>isinstance(obj, cls)</code>而不是{<cd6>}。您可能还注意到加法的拼写是<code>obj1 + obj2</code>而不是<code>obj1.add(obj2)</code>,减法拼写为<code>obj1 - obj2</code>而不是{<cd10>}等等。。。关键是一些内置的“函数”被视为运算符而不是真正的函数,并且由“u magic_uu”方法(<code>__len__</code>,<code>__hash__</code>,<code>__add__</code>等)支持。在</p>
<p>至于“为什么”,你不得不问GvR,但历史原因是,它至少避免了很多名称空间污染/名称冲突。如果<code>length</code>已经是一个“某种类型但不是明确保留”的名称,那么如何命名“Line”或“Rectangle”类的长度?内省应该如何理解<code>Rectangle.length()</code>并不意味着{<cd16>}是一个类似于序列的对象?在</p>
<p>使用泛型“operator”函数(注意,适当的运算符也作为函数存在,cf the <code>operator</code>module)+“uu magic_uu”方法可以明确意图,并为“用户空间”语义保留正常名称。在</p>
<p>wrt/英语的常规句子结构,我不得不说我真的不在乎——我学的第一门编程语言是苹果的hyperscript(后来变成了applescript),我很快发现它太冗长了。在</p>
<blockquote>
<p>I could imagine there are cases where you're not sure if the object is
even a proper object, rather than just None</p>
</blockquote>
<p><code>None</code><em>是一个“适当的”对象。Python中的所有内容(好吧,可以绑定到名称的所有内容)都是“正确”的对象。在</p>