2 回答

TA貢獻1805條經驗 獲得超10個贊
CPython實現細節:除了數字之外的不同類型的對象按其類型名稱排序; 不支持正確比較的相同類型的對象按其地址排序。
當您訂購兩個字符串或兩個數字類型時,排序以預期的方式完成(字符串的字典順序,整數的數字排序)。
當您訂購數字和非數字類型時,數字類型首先出現。
>>> 5 < 'foo'
True
>>> 5 < (1, 2)
True
>>> 5 < {}
True
>>> 5 < [1, 2]
True
當您訂購兩個不兼容的類型(兩者都不是數字)時,它們按其類型名的字母順序排序:
>>> [1, 2] > 'foo' # 'list' < 'str'
False
>>> (1, 2) > 'foo' # 'tuple' > 'str'
True
>>> class Foo(object): pass
>>> class Bar(object): pass
>>> Bar() < Foo()
True
一個例外是舊式類,它總是出現在新式類之前。
>>> class Foo: pass # old-style
>>> class Bar(object): pass # new-style
>>> Bar() < Foo()
False
這種行為是由語言規范強制執行的,還是由實現者決定的?
否則,不同類型的對象總是比較不相等,并且一致但是任意地排序。
所以它是一個實現細節。
任何主要的Python實現之間是否存在差異?
我無法回答這個,因為我只使用了官方的CPython實現,但還有其他Python實現,如PyPy。
Python語言版本之間是否存在差異?
在Python 3.x中,行為已更改,因此嘗試排序整數和字符串將引發錯誤:
>>> '10' > 5
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
'10' > 5
TypeError: unorderable types: str() > int()
添加回答
舉報