2 回答

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個(gè)贊
CPython實(shí)現(xiàn)細(xì)節(jié):除了數(shù)字之外的不同類(lèi)型的對(duì)象按其類(lèi)型名稱排序; 不支持正確比較的相同類(lèi)型的對(duì)象按其地址排序。
當(dāng)您訂購(gòu)兩個(gè)字符串或兩個(gè)數(shù)字類(lèi)型時(shí),排序以預(yù)期的方式完成(字符串的字典順序,整數(shù)的數(shù)字排序)。
當(dāng)您訂購(gòu)數(shù)字和非數(shù)字類(lèi)型時(shí),數(shù)字類(lèi)型首先出現(xiàn)。
>>> 5 < 'foo'
True
>>> 5 < (1, 2)
True
>>> 5 < {}
True
>>> 5 < [1, 2]
True
當(dāng)您訂購(gòu)兩個(gè)不兼容的類(lèi)型(兩者都不是數(shù)字)時(shí),它們按其類(lèi)型名的字母順序排序:
>>> [1, 2] > 'foo' # 'list' < 'str'
False
>>> (1, 2) > 'foo' # 'tuple' > 'str'
True
>>> class Foo(object): pass
>>> class Bar(object): pass
>>> Bar() < Foo()
True
一個(gè)例外是舊式類(lèi),它總是出現(xiàn)在新式類(lèi)之前。
>>> class Foo: pass # old-style
>>> class Bar(object): pass # new-style
>>> Bar() < Foo()
False
這種行為是由語(yǔ)言規(guī)范強(qiáng)制執(zhí)行的,還是由實(shí)現(xiàn)者決定的?
有沒(méi)有語(yǔ)言規(guī)范。該語(yǔ)言參考說(shuō):
否則,不同類(lèi)型的對(duì)象總是比較不相等,并且一致但是任意地排序。
所以它是一個(gè)實(shí)現(xiàn)細(xì)節(jié)。
任何主要的Python實(shí)現(xiàn)之間是否存在差異?
我無(wú)法回答這個(gè),因?yàn)槲抑皇褂昧斯俜降腃Python實(shí)現(xiàn),但還有其他Python實(shí)現(xiàn),如PyPy。
Python語(yǔ)言版本之間是否存在差異?
在Python 3.x中,行為已更改,因此嘗試排序整數(shù)和字符串將引發(fā)錯(cuò)誤:
>>> '10' > 5
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
'10' > 5
TypeError: unorderable types: str() > int()
添加回答
舉報(bào)