2013-07-01 48 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,那是实现我自己的定制对象的哨兵? –