2013-10-23 109 views
2

我只注意到Python允许你为一个字符串值与一些比较:为什么一个字符串总是“大于”一个数字?

>>> '10' > 1000 
True 
>>> 'a' > 1000 
True 
>>> 'a' > -1000 
True 

为什么任何字符串总是比任何数量更大?

+1

您正在比较两种不具有任何有意义的比较的类型,所以我认为这取决于解释器的实现。 – Santa

+1

如果你问“Python为什么选择这个规则”而不是“规则是什么”,[Alex Martelli的回答](http://stackoverflow.com/a/2384139/908494)关于另一个问题的重复可能是你在找什么。 – abarnert

+0

@abarnert关于为什么会这样,以及为什么这会在Python 3中引发一个错误的良好解释,谢谢。 –

回答

4

在Python 2,§5.3 - Comparisons说:

对象不同的类型,除了不同的数值类型和不同的串类型,从未比较相等; 这样的对象被一致但是任意地排序(以便对异类阵列进行排序得到一致的结果)。此外,某些类型(例如,文件对象)仅支持简单的比较概念,其中任何两个类型的对象都不相等。再次,这样的对象是任意排列但一致的。当任何操作数是复数时,<,<=,>>=运算符将引发TypeError异常。

在Python 3,§4.3 - Comparisons表示:

对象不同的类型,除了不同的数字类型,从未比较相等。此外,某些类型(例如函数对象)仅支持简单的比较概念,即任何两种类型的对象都不相等。 比较与另一内置数字型,当对象是不同的类型,而且不能进行比较,或在其它情况下,其中有一个复数时<<=>>=运营商将提高TypeError异常没有定义的顺序。

+0

下面也可能值得添加“CPython实现细节”,这就解释了为什么他看到特定的“一致但任意”排序。 (虽然它不是100%完整的;它并没有解释“无”总是小于其他任何东西,而数字类型总是比任何非“无”或“数字”意味着什么,或规则用于处理内置数值类型的病态子类,或者......但唯一的地方是你可以在源代码中找到更多解释。) – abarnert

相关问题