max*_*max 50 python infinity python-3.x
注意:虽然接受的答案达到了我想要的结果,并且@ecatmur答案提供了更全面的选项,但我觉得强调我的用例首先是一个坏主意是非常重要的.这在@Jason Orendorff的答案中得到了很好的解释.
注意:这个问题不是关于的问题sys.maxint
的重复.它与此无关sys.maxint
; 即使在sys.maxint
可用的python 2中,它也不代表最大整数(参见接受的答案).
我需要创建一个比任何其他整数都大的整数,这意味着一个int
对象True
在与任何其他int
对象相比时返回>
.用例:库函数需要一个整数,强制某种行为的唯一简单方法是传递一个非常大的整数.
在python 2中,我可以使用sys.maxint
(编辑:我错了).在python 3中,math.inf
是最接近的等价物,但我无法将其转换为int
.
wim*_*wim 67
由于python整数是无界的,你必须使用自定义类:
import functools
@functools.total_ordering
class NeverSmaller(object):
def __le__(self, other):
return False
class ReallyMaxInt(NeverSmaller, int):
def __repr__(self):
return 'ReallyMaxInt()'
Run Code Online (Sandbox Code Playgroud)
在这里,我使用了混合类,NeverSmaller
而不是直接装饰ReallyMaxInt
,因为在Python 3中,functools.total_ordering
通过继承的现有排序方法可以防止动作int
.
用法演示:
>>> N = ReallyMaxInt()
>>> N > sys.maxsize
True
>>> isinstance(N, int)
True
>>> sorted([1, N, 0, 9999, sys.maxsize])
[0, 1, 9999, 9223372036854775807, ReallyMaxInt()]
Run Code Online (Sandbox Code Playgroud)
请注意,在python2中,sys.maxint + 1
大于sys.maxint
,所以你不能依赖它.
免责声明:这是OO意义上的整数,它在数学意义上不是整数.因此,从父类继承的算术运算int
可能行为不合理.如果这会导致您的预期用例出现任何问题,那么可以通过实现__add__
和朋友禁用它们来解决错误.
eca*_*mur 27
Konsta Vesterinen infinity.Infinity
将工作(pypi),除了它不继承int
,但你可以将它子类化:
from infinity import Infinity
class IntInfinity(Infinity, int):
pass
assert isinstance(IntInfinity(), int)
assert IntInfinity() > 1e100
Run Code Online (Sandbox Code Playgroud)
另一个实现"无限"值的包是Extremes,它是从被拒绝的PEP 326中抢救出来的; 再次,你需要从extremes.Max
和子类int
.
Jas*_*rff 15
用例:库函数需要一个整数,强制某种行为的唯一简单方法是传递一个非常大的整数.
这听起来像是库中的缺陷,应该在其界面中修复.那么它的所有用户都会受益.它是什么图书馆?
使用重写的比较运算符创建一个神奇的int子类可能对您有用.但它很脆弱; 你永远不知道图书馆将对该对象做什么.假设它将其转换为字符串.应该怎么办?随着图书馆的发展,数据自然会以不同的方式使用; 您有一天可能会更新库,发现您的技巧不再有效.
归档时间: |
|
查看次数: |
7370 次 |
最近记录: |