Python2比较元组和整数?

时间:2019-09-10 11:48:39

标签: python python-3.x tuples comparison python-2.x

我目前正在将一些Python2代码移植到Python3,并且遇到了这个小问题:

.contentrow

现在,在Python3中它会引发错误:

v = (1, )
if v < 1:
    pass

这很好,因为您不能比较元组和整数。但是在Python2中,这是允许的:

TypeError: '<' not supported between instances of 'tuple' and 'int'.

我已经在Google上进行了搜索,但找不到有关此比较如何工作的示例。上面的示例如何/为什么评估为>>> (1, ) < 1 False

1 个答案:

答案 0 :(得分:1)

全部在文档中

https://docs.python.org/2/library/stdtypes.html#comparisons

  

不同类型的对象(不同的数字类型和不同的字符串类型除外)永远不会比较相等;这样的对象可以一致但任意地排序(以便对异构数组进行排序可以得到一致的结果)。此外,某些类型(例如文件对象)仅支持退化的比较概念,其中该类型的任何两个对象都不相等。同样,此类对象可以任意但一致地排序。当任何操作数为复数时,<,<=,>和> =运算符将引发TypeError异常。


您已经注意到,由于比较机制的某些变化,比较元组和整数在Python 3中不再起作用:

https://docs.python.org/3.0/whatsnew/3.0.html#ordering-comparisons

  
      
  • 当操作数没有有意义的自然顺序时,顺序比较运算符(<,<=,> =,>)会引发TypeError异常。因此,像1 <'',0> None或len <= len这样的表达式不再有效,例如None   
  • builtin.sorted()和list.sort()不再接受提供比较功能的cmp参数。请改用key参数。 N.B.键和反向参数现在为“仅关键字”。
  •   
  • 应将cmp()函数视为已消失,并且不再支持 cmp ()特殊方法。使用 lt ()进行排序,使用哈希()进行 eq ()以及其他所需的丰富比较。 (如果确实需要cmp()功能,则可以使用表达式(a> b)-(a