在Python 2.6.4中:
>> ''>0
True
这是为什么?
解决方法:
允许对任意对象进行顺序比较的原始设计动机是允许对异构列表进行排序 – 有用的是,将所有字符串按字母顺序排列在彼此旁边,并且所有数字按数字顺序彼此相邻,尽管首先出现的两个街区并没有得到语言的保证.例如,这允许在O(N log N)最坏情况时间内获取任何列表中的唯一项目(即使是具有不可清洗项目的项目)
多年来,这种务实的安排受到侵蚀.第一次破解是在很多版本之前取消了比较复杂数字的能力时出现的.突然间,对任何列表进行排序的能力消失了:如果列表包含复数,则可能不再适用,可能还包含其他类型的项目.然后Guido开始更普遍地讨厌异构列表,因此开始认为这些列表是否可以有用地排序并不重要……因为根据他的新想法,这些列表不应该首先存在.他没有做任何事情来禁止他们,但也不倾向于接受任何妥协来支持他们.
请注意,这两项更改都使得余额稍微偏离了Python的Zen的“实用性节拍纯度”项目(之前已经写过,当复杂的数字仍然可以进行订购时比较;-) – 更纯粹,实用性稍差.
然而,订购的能力 – 比较两个任意对象(只要两者都不是一个复杂的数字;-)保持了很长一段时间,因为大约在同一时间Guido开始真正坚持保持强大的向后兼容性(这种转变既实用又纯粹;-).
所以,它只在Python 3中,明确地,有意地删除了强向后兼容性的约束,以允许一些长期需要但向后不兼容的增强(特别是简化和删除过时的冗余方式来执行某些任务),这些实例的顺序比较不同类型的成为一个错误.
因此,这篇历史和哲学论文基本上是真正回应你的“为什么”问题的唯一方法……!