允许任意对象的顺序比较的原始设计动机是允许异构列表的排序 – 有用地,将所有字符串按字母顺序彼此相邻,并且所有数字以数字顺序彼此相邻,两个块首先不是由语言保证。例如,这允许在O(N log N)最坏情况时间中的任何列表(甚至一个具有非哈希项目)中仅获得唯一项目
多年来,这种务实安排受到侵蚀。第一个裂缝出现时,命令 – 比较复数的能力被带走了,在几个版本前。突然,排序任何列表的能力消失了:如果列表包含复数,可能与其他类型的项目一起,它不再应用。然后Guido开始不喜欢异类列表更普遍,因此开始认为,如果这样的列表可以有用地排序没有真正重要…因为这样的列表不应该存在在第一位,根据他的新思维。他没有做任何事情禁止他们,但不倾向于接受任何妥协来支持他们。
注意,这两个变化使平衡与Python的禅的“实用性节拍纯度”项目(这是早些时候写的,当复数仍然可以是顺序比较时; – )稍微远一点 – – 更纯净,位少实用性。
然而,命令比较两个任意对象的能力(只要没有一个复数; – )保持很长时间,因为在同一时间Guido开始真的坚持保持强大的向后兼容性(一个转变,既实用又纯粹;-)。
所以,只有在Python 3中,它明确而有意地删除强大的向后兼容性的约束,允许一些长期需要但向后不兼容的增强(特别是简化和删除过时,冗余的方式来执行某些任务),顺序比较实例的不同类型成为一个错误。
所以这个历史和哲学论文基本上是真正回应你的“为什么”问题的唯一方法…! 🙂