Types: 3. Comparisons
3. Comparisons
所有对象都支持比较操作。它们都具有相同的优先级(这比布尔操作的优先级高)。比较可以任意链接; 例如x < y <= z等同于x < y and y <= z,除了y只被评估一次(但是在两种情况下,当zx < y被发现为假时根本不被评估)。
本表总结了比较操作:
手术 | 含义 | 笔记 |
---|---|---|
< | 严格小于 | |
<= | 小于或等于 | |
严格大于 | | |
= | 大于或等于 | |
== | 等于 | |
!= | 不等于 | (1) |
是 | 对象身份 | |
不是 | 否定对象身份 | |
注释:
- !=也可以编写<>,但这是为了向后兼容而保留的过时使用。新代码应该始终使用!=。
不同类型的对象,除了不同的数字类型和不同的字符串类型,永远不会相等; 这样的对象排序一致但任意(排序异构数组产生一致的结果)。此外,某些类型(例如,文件对象)仅支持简单的比较概念,其中任何两个类型的对象都不相等。再次,这样的对象是任意排列但一致的。的<,<=,>和>=运营商将提高一个TypeError当任何操作数是复数例外。
除非类定义__eq__()
方法或__cmp__()
方法,否则通常将类的不同实例比较为不相等。
一个类的实例不能相对于同一类的其他实例,或其他类型的对象进行排序,除非类定义要么足够的富比较方法(__lt__()
,__le__()
,__gt__()
,和__ge__()
)或__cmp__()
方法。
CPython实现细节:
除数字以外的不同类型的对象按其类型名称排序; 不支持正确比较的相同类型的对象按其地址排序。
具有相同优先级的语法两个操作,in
并且not in
,只能通过序列类型(下)的支持。