Consider following problem in Python:
>>> () < []
这个语句返回
False
。>>> () > []
返回的结果为True。据我所知,[]
等于False
,但空元组是什么呢?
如果我们输入
>>> 1233 < (1,2)
我们得到了一个
True
的返回值,但为什么呢?谢谢。
Consider following problem in Python:
>>> () < []
False
。>>> () > []
返回的结果为True。据我所知,[]
等于False
,但空元组是什么呢?
如果我们输入
>>> 1233 < (1,2)
True
的返回值,但为什么呢?来自 docs:
运算符 <, >, ==, >=, <= 和 != 用于比较两个对象的值。这些对象不必具有相同的类型。如果两者都是数字,则它们会被转换为一种公共类型。否则,不同类型的对象始终不相等,并且按顺序一致但任意地排序。您可以通过定义
__cmp__
方法或像__gt__
这样的丰富比较方法(在第3.4节中描述)来控制非内置类型的对象的比较行为。(这种不寻常的比较定义是为了简化排序操作、in 和 not in 操作符的定义。在未来,不同类型的对象的比较规则可能会发生改变。)
这是正确的。在 Python 3 中,这将产生一个 TypeError
。
() > []
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-3-d2326cfc55a3> in <module>()
----> 1 () > []
TypeError: unorderable types: tuple() > list()
回到Python 2:文档强调这是一种任意但一致的排序方式。
在cPython 2中,不同类型的比较是通过它们的类型名称进行的。因此,tuple
在词典顺序上“大于”list
。
这是 CPython (2.x) 的实现细节,如内置类型-比较文档所述:
CPython 实现细节:不同类型的对象(数字除外)按其类型名称排序;相同类型但不支持适当比较的对象按其地址排序。
因此,任何元组都比任何列表大,因为'tuple' > 'list'
。
在 CPython 3 中不再适用,对于 Python 2.x 的其他实现也从未适用。
这可能取决于实现,我认为没有直接的原因。 Python 3.X 禁止两种不同类型之间的比较。
__cmp__()
。而Python 3.x不再使用此方法。
True
。 - iMom0[]
不等于False
。它在逻辑上被评估为False
,与()
相同。因此,bool(()) == bool([])
返回True
。 - bogatron