如何使一个整数大于任何其他整数?

新手上路,请多包涵

注意:虽然接受的答案达到了我想要的结果,并且@ecatmur 答案提供了一个更全面的选项,但我觉得强调我的用例首先是一个坏主意非常重要。这在下面的 @Jason Orendorff 回答中 得到了很好的解释。

注意:这个问题不是 关于 sys.maxint 的问题 的重复。它与 sys.maxint 无关;即使在 sys.maxint 可用的 python 2 中,它也不代表最大整数(请参阅已接受的答案)。

I need to create an integer that’s larger than any other integer, meaning an int object which returns True when compared to any other int object using > 。用例:库函数需要一个整数,强制执行某种行为的唯一简单方法是传递一个非常大的整数。

在 python 2 中,我可以使用 sys.maxint (编辑:我错了)。在 python 3 中, math.inf 是最接近的等价物,但我无法将其转换为 int

原文由 max 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 811
2 个回答

由于 python 整数是无界的,因此您必须使用自定义类来执行此操作:

 import functools

@functools.total_ordering
class NeverSmaller(object):
    def __le__(self, other):
        return False

class ReallyMaxInt(NeverSmaller, int):
    def __repr__(self):
        return 'ReallyMaxInt()'

在这里,我使用了混合类 NeverSmaller 而不是直接修饰 ReallyMaxInt ,因为在 Python 3 上, functools.total_ordering 7463b68b839e05d8149c61279-a-030fe 的操作会被现有的阻止从 int 继承的排序方法。

使用演示:

 >>> N = ReallyMaxInt()
>>> N > sys.maxsize
True
>>> isinstance(N, int)
True
>>> sorted([1, N, 0, 9999, sys.maxsize])
[0, 1, 9999, 9223372036854775807, ReallyMaxInt()]

请注意,在 python2 中, sys.maxint + 1 大于 sys.maxint ,所以你不能依赖它。

_免责声明_:这是 OO 意义上的整数,不是数学意义上的整数。因此,从父类 int 继承的算术运算可能不合理。如果这会导致您的预期用例出现任何问题,则可以通过实施 __add__ 来禁用它们,朋友们只需出错即可。

原文由 wim 发布,翻译遵循 CC BY-SA 3.0 许可协议

Konsta Vesterinen 的 infinity.Infinity 可以工作( pypi ),除了它不继承自 int ,但你可以将它子类化:

 from infinity import Infinity
class IntInfinity(Infinity, int):
    pass
assert isinstance(IntInfinity(), int)
assert IntInfinity() > 1e100

另一个实现“无限”值的包是 Extremes ,它是从被拒绝的 PEP 326 中抢救出来的;同样,您需要从 extremes.Maxint 进行子类化。

原文由 ecatmur 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题