2013-07-01 49 views
1

我正在尋找一組好的哨兵值,例如實驗:python內置類型的比較排序

[] > "sdfasfg" >() 

這似乎證明:

CPython的實現細節:除了 數量不同類型的對象是由它們的類型名稱排序;不支持正確比較的相同類型的對象 按其地址排序。 reference

以相同的方式,

object() < str() 

「最大」內建類型似乎是unicode,我可以作爲一個「正確」的標記值使用Unicode的類型的比較?這是一個比任何Unicode字符串都大的值?

Python中內置類型實例的比較順序是否真的很好定義?

+2

你想做什麼?就像你在你的文章中說的那樣,它是一個CPython實現細節,並且已經在Python 3中完全刪除。 – Volatility

+0

我正在尋找一個sentinel值 - 這是比任何用戶對象小或大的事情。任何字符串/。 –

+0

是的,但爲什麼?無論如何,你不應該依賴實現細節。 – Volatility

回答

2

任意對象的比較稱爲「豐富comarisons」。有一些文件herehere

如果您正在使用Python 3,請檢查out。從這個來源的相關報價:

具有豐富的比較方法和__cmp__()方法都違反了這一原則:應該只有一個做到這一點明顯的方式,所以在Python 3 __cmp__()支持已被刪除。因此,對於Python 3,如果您希望您的對象具有可比性,則必須實現所有豐富的比較運算符。

+0

感謝您的鏈接,非常翔實。我是否閱讀你的答案,我必須diy,那是實現我自己的定製對象的哨兵? –