python教程—如何使一个整数大于任何其他整数?-Python实用宝典

python教程—如何使一个整数大于任何其他整数?

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

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

注意:这个问题不是关于sys.maxint的问题的副本。它与sys.maxint无关;甚至在python2中。maxint是可用的,它不表示最大整数(请参阅接受的答案)。

我需要创建一个比任何其他整数都大的整数,这意味着一个int对象,与使用>的任何其他int对象相比返回True。用例:library函数需要一个整数,强制执行某个行为的唯一简单方法是传递一个非常大的整数。

在python2中,我可以使用sys。马新特(编辑:我错了)。在python3中,是数学。inf是最接近的等价项,但是我不能把它转换成int。

回答

由于python整数是无界的,所以必须使用自定义类来实现:

    import functools @functools.total_ordering class NeverSmaller(object): def __le__(self, other): return False class ReallyMaxInt(NeverSmaller, int): def __repr__(self): return 'ReallyMaxInt()'

这里我使用了一个mix-in类,而不是直接修饰ReallyMaxInt,因为在python3中函数工具的作用。total_ordered将被从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__和friends来禁用它们。

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
1

发表评论