<p><strong>这并不总是一个错误</strong></p>
<p>首先,为了弄清楚,这并不总是一个错误。在</p>
<p>在这种情况下,很明显这种比较是错误的。在</p>
<p>但是,由于Python的动态特性,请考虑以下代码(如果很糟糕,则完全有效):</p>
<pre><code>import random
random.random = 9 # Very weird but legal assignment.
random.random < 10 # True
random.random > 10 # False
</code></pre>
<p><strong>比较对象时实际发生了什么?</strong></p>
<p>至于实际情况,将一个函数对象与一个数字进行比较,请看一下Python文档:<a href="http://docs.python.org/reference/expressions.html" rel="nofollow noreferrer">Python Documentation: Expressions</a>。查看第5.9节,题为“比较”,其中指出:</p>
<blockquote>
<p>The operators <, >, ==, >=, <=, and != compare the values of two objects. The objects need not have the same type. If both are numbers, they are converted to a common type. <strong>Otherwise, objects of different types always compare unequal</strong>, and are ordered consistently but arbitrarily. You can control comparison behavior of objects of non-built-in types by defining a <strong>cmp</strong> method or rich comparison methods like <strong>gt</strong>, described in section Special method names.</p>
<p><strong>(This unusual definition of comparison was used to simplify the definition of operations like sorting and the in and not in operators. In the future, the comparison rules for objects of different types are likely to change.)</strong></p>
</blockquote>
<p>这应该可以解释发生了什么,以及原因。在</p>
<p>顺便说一句,我不确定Python的新版本会发生什么。在</p>
<p>编辑:如果你想知道,Debilski的答案给出了关于Python3的信息。在</p>