我最近在程序中发现了一个拼写错误
while len(first_list) > second_list:
do_stuff
我玩弄了这个并发现5 < ["apple"] == True
和5 > ["apple"] == False
为什么Python允许这些类型的比较?在幕后进行评估以确定5
是否小于["apple"]
?
答案 0 :(得分:4)
我认为在这种情况下比较类型,所以就像写作:
type(5) < type(["apple"])
并且因为“int”和“list”按字典顺序(“i”&lt;“l”)进行比较,所以你得到了这个输出。
如果您尝试:
"5" > ["apple"]
你会得到假,因为“string”&gt; “列表”。
CPython实现细节:除了数字之外的不同类型的对象按其类型名称排序;不支持正确比较的相同类型的对象按其地址排序。
答案 1 :(得分:3)
来自python 2的文档:
运算符
<
,>
,==
,>=
,<=
和!=
比较两个对象的值。对象不必具有相同的类型。如果两者都是数字,则将它们转换为通用类型。否则,不同类型的对象总是比较不相等,并且一致但是任意地排序。您可以通过定义__cmp__
方法或丰富的比较方法(如__gt__
)来控制非内置类型对象的比较行为。
答案 2 :(得分:-3)
根据this,不同的类型只需要比较不平等,由实现来决定如何处理它。恰好CPython的实现决定根据类型名称进行排序。