Python 3 имеет float('inf')
и Decimal('Infinity')
, но не int('inf')
. Итак, почему число, представляющее бесконечное множество целых чисел, отсутствует на языке? Является ли int('inf')
необоснованным?
Бесконечное целое число в Python
Ответ 1
Взято отсюда: https://www.gnu.org/software/libc/manual/html_node/Infinity-and-NaN.html
Число с плавающей запятой IEEE 754 может представлять собой положительную или отрицательную бесконечность, а NaN (не число)
То есть, представление float
и Decimal
может хранить эти специальные значения. Однако в базовом типе int
нет ничего, что могло бы сохранить то же самое. Когда вы превысите предел 2 ^ 32 в 32-битном int без знака, вы просто снова перевернитесь на 0.
Если вы хотите, вы можете создать класс, содержащий целое число, которое может содержать возможность бесконечных значений.
Ответ 2
Вы правы, что целочисленная бесконечность возможна, и что ни один из них не был добавлен в стандарт Python. Вероятно, это связано с тем, что math.inf
вытесняет его почти во всех случаях (как заявил Мартейн в своем комментарии).
Тем временем я добавил в PyPI реализацию расширенных целых чисел :
In [0]: from numbers import Integral, Real
In [0]: from extended_int import int_inf, ExtendedIntegral, Infinite
In [0]: i = int_inf
In [4]: float(i)
Out[4]: inf
In [5]: print(i)
inf
In [6]: i ** i
Out[6]: inf
In [7]: i
Out[7]: inf
In [9]: isinstance(i, Real)
Out[9]: True
In [10]: isinstance(i, Integral)
Out[10]: False
In [11]: isinstance(i, Infinite)
Out[11]: True
In [12]: isinstance(i, ExtendedIntegral)
Out[12]: True
In [13]: isinstance(2, ExtendedIntegral)
Out[13]: True
In [14]: isinstance(2, Infinite)
Out[14]: False
Ответ 3
Для python 2. Иногда бывает, что вам нужно очень большое целое число. Например, я могу создать subarray с x [: n] и, возможно, иногда мне нужно установить n на значение, чтобы весь массив был создан. Поскольку вы не можете использовать float для n (python хочет целое число), вам нужно "большое целое число". Хороший способ сделать это - использовать наибольшее целое число: sys.maxint. Вот пример:
# MAX_SOURCES = sys.maxint # normal setting
MAX_SOURCES = 5 # while testing
# code to use an array ...
... sources[:MAX_SOURCES]
Итак, во время тестирования я мог бы использовать меньший массив источников, но использовать полный массив в процессе производства.