为什么Python 2中的''> 0为True?

时间:2010-03-05 01:57:02

标签: python logic operators python-2.x

在Python 2.6.4中:

>> ''>0
True

为什么?

2 个答案:

答案 0 :(得分:76)

允许对任意对象进行顺序比较的原始设计动机是允许对异构列表进行排序 - 有用的是,将所有字符串按字母顺序排列在彼此旁边,并且所有数字按数字顺序彼此相邻,虽然这两个区块中的哪一个首先出现在语言中并不能保证。例如,这允许在O(N log N)最坏情况时间内获取任何列表中的唯一项(即使是具有不可清除项目的项目)

多年来,这种务实的安排受到侵蚀。第一次破解是在很多版本之前取消了比较复杂数字的能力时出现的。突然间,对任何列表进行排序的能力消失了:如果列表包含复数,则可能不再适用,可能还包含其他类型的项目。然后Guido开始更普遍地讨厌异构列表,因此开始认为它不是真的重要如果这样的列表可以有用地排序......因为这样的列表不应该首先存在,根据他的新思维。他没有做任何事情来禁止他们,但他们也不倾向于接受任何妥协来支持他们。

请注意,这两项更改都会使平衡稍微远离Python的Zen的“实用性节拍纯度”项目(之前已经写过,当复杂的数字仍然可以进行订单比较时;-) - 更纯净,更不实用。

然而,订购的能力 - 比较两个任意对象(只要两者都不是一个复数;-)保持很长一段时间,因为大约在同一时间Guido开始真正坚持保持强大的向后兼容性(一个转变< strong> both 实用纯; - )。

所以,它只在Python 3中,明确地,有意地删除了强大向后兼容性的约束,以允许一些长期需要但向后不兼容的增强(特别是简化和删除过时的冗余方式来执行某些任务),该命令比较不同类型的实例成了一个错误。

因此,这篇历史和哲学论文基本上是真正回应你的“为什么”问题的唯一方法......! : - )

答案 1 :(得分:21)

来自https://docs.python.org/2.7/tutorial/datastructures.html#id1

  

请注意,比较不同类型的对象是合法的。结果   是确定性的但是随意的:类型按名称排序。   因此,列表总是小于字符串,字符串总是如此   小于元组等[1]比较混合数字类型   根据它们的数值,0等于0.0,等等。