Python 2.x允许比较异构类型。
一个有用的快捷方式(在这里是Python 2.7)是None比较小于任何整数或浮点值:>>> None < float('-inf') < -sys.maxint * 2l < -sys.maxint
True
在Python 2.7中,空元组()是一个无限值:>>> () > float('inf') > sys.maxint
True
当您可能对int和float的混合列表进行排序并希望有绝对的最小值和最大值可供引用时,此快捷方式非常有用。
但是,在Python 3000中已删除此快捷方式(这是Python 3.2):>>> None < 0
Traceback (most recent call last):
File "", line 1, in
TypeError: unorderable types: NoneType() < int()
此外,Python3000has removedsys.maxint基于所有int都会促进long且该限制不再适用的理论。
PEP 326,一个顶部和底部值的大小写,在Python中高级了一个引用min和max。新的排序行为documented。
既然PEP 326被拒绝了,那么对于在Python 2X和Python 3000上处理整数、浮点数和长整数的最小值和最大值,有什么有用的、可用的定义呢?
编辑
有几个答案是“只要使用maxv=float('inf')”。。。不管可能性有多小,我想的原因是:>>> float(2**5000)
Traceback (most recent call last):
File "", line 1, in
OverflowError: long int too large to convert to float
以及:>>> cmp(1.0**4999,10.0**5000)
Traceback (most recent call last):
File "", line 1, in
OverflowError: (34, 'Result too large')
然而:>>> () > 2**5000
True
为了将cmp转换为浮点值float('inf'),长值将需要转换为浮点值,并且转换将导致OverflowError。。。
结论
谢谢大家的回答和评论。我选择了锥虫的answer,因为它似乎最符合我的要求:一个绝对最大和绝对最小的值,如维基百科中所描述的entry on infinity.
有了这个问题,我了解到long或int值不会转换为float来完成float('inf') > 2**5000的比较。我不知道。