为什么空字典大于1?

Sea*_*den 15 python

为什么以下代码为真?

>>> foo = {}
>>> foo > 1
True
>>> foo < 1
False
>>> foo == 0
False
>>> foo == -1
False
>>> foo == 1
False
Run Code Online (Sandbox Code Playgroud)

我明白我想要的是len(foo)> 1,但作为初学者,这让我感到惊讶.

Cha*_*ens 14

来自文档:

运算符<,>,==,> =,<=和!=比较两个对象的值.对象不必具有相同的类型.如果两者都是数字,则将它们转换为通用类型.否则,不同类型的对象总是比较不相等,并且一致但是任意地排序.您可以通过定义__cmp__方法或丰富的比较方法来控制非内置类型对象的比较行为__gt__,如3.4节所述.

(这种不寻常的比较定义用于简化操作的定义,如排序和运算符中的in和not.将来,不同类型的对象的比较规则可能会发生变化.)


mgi*_*son 7

不兼容类型之间的丰富比较基于python2.x中类型的名称(?),并且在python3.x中已被禁止.

无论如何,在python2.x中,保证为特定的python实现和版本提供相同的结果,但是没有定义排序本身.

  • [5.3.[比较](http://docs.python.org/2/library/stdtypes.html#comparisons)声明:"CPython实现细节:除了数字之外的不同类型的对象按其类型名称排序;相同类型的对象不支持正确的比较是按他们的地址排序的." 所以一般情况下都是如此,不仅仅是数字.奇怪的. (6认同)
  • 我也打算写那个.然后我想:"但是`"int">"dict"`,那么为什么不是`foo <1`?" (3认同)