3 回答

TA贡献1804条经验 获得超8个赞
允许对任意对象进行顺序比较的最初设计动机是允许对异构列表进行排序-有用的是,这将使所有字符串按字母顺序彼此相邻,而所有数字按数字顺序彼此相邻,尽管语言不能保证两个块先到达。例如,这允许在O(N log N)最坏的情况下仅获取任何列表中的唯一项(甚至包含非哈希项的列表)
多年来,这种务实的安排受到侵蚀。第一次破解是在很早以前就取消了对复数进行阶数比较的功能。突然,排序的功能的任何名单消失:它不与其他类型的项目施加任何更多,如果列表中包含复数,可能在一起。然后圭多开始更普遍不喜欢异构名单,从而开始思考,它并没有真正重要,如果这样的列表,可以有效地分拣或不...因为这样的名单应首先不存在的,根据他的新思维。他没有采取任何措施禁止他们,但也不愿意接受任何妥协来支持他们。
请注意,这两个更改都使天平与Python Zen的“实用性胜过纯度”项(稍早写过,当复数仍可以进行阶数比较时; ;-)相比有点偏离了。实用性稍差。
尽管如此,对两个任意对象进行排序(只要它们都不是复数;-)的能力就保留了很长时间,因为在同一时间,Guido开始真正坚持保持强大的向后兼容性(这种转变既实用又纯粹) ;-)。
因此,仅在Python 3中,它明确并故意消除了强大的向后兼容性的约束,以允许进行一些长期渴望但向后不兼容的增强功能(尤其是简化和删除执行某些任务的过时,多余的方式),从而对实例进行顺序比较不同类型的错误。
因此,这一历史和哲学论着基本上是真正回答您的“为什么”问题的唯一方法……!:-)

TA贡献1794条经验 获得超7个赞
注意:在Python 2中,可以将一个复数与任何其他对象进行比较,但另一个复数除外!complex(1,0) > 'abc'
是False
但complex(1,0) > complex(0,0)
提出了一个问题TypeError
添加回答
举报