为什么Python 2允许列表和数字之间的比较?

时间:2016-12-03 08:40:26

标签: python python-2.7

我最近在程序中发现了一个拼写错误

while len(first_list) > second_list:
    do_stuff

我玩弄了这个并发现5 < ["apple"] == True5 > ["apple"] == False

为什么Python允许这些类型的比较?在幕后进行评估以确定5是否小于["apple"]

3 个答案:

答案 0 :(得分:4)

我认为在这种情况下比较类型,所以就像写作:

type(5) < type(["apple"])

并且因为“int”和“list”按字典顺序(“i”&lt;“l”)进行比较,所以你得到了这个输出。

如果您尝试:

"5" > ["apple"]

你会得到假,因为“string”&gt; “列表”。

Documentation

  

CPython实现细节:除了数字之外的不同类型的对象按其类型名称排序;不支持正确比较的相同类型的对象按其地址排序。

答案 1 :(得分:3)

来自python 2的文档:

  

运算符<>==>=<=!=比较两个对象的值。对象不必具有相同的类型。如果两者都是数字,则将它们转换为通用类型。否则,不同类型的对象总是比较不相等,并且一致但是任意地排序。您可以通过定义__cmp__方法或丰富的比较方法(如__gt__)来控制非内置类型对象的比较行为。

答案 2 :(得分:-3)

根据this,不同的类型只需要比较不平等,由实现来决定如何处理它。恰好CPython的实现决定根据类型名称进行排序。