Что такое sys.maxint в Python 3?


162

Я пытался выяснить, как представить максимальное целое число, и я прочитал, чтобы использовать "sys.maxint". Тем не менее, в Python 3, когда я вызываю его, я получаю:

AttributeError: module 'object' has no attribute 'maxint'

Ответы:


172

Константа sys.maxint была удалена, так как больше нет ограничения на значение целых чисел. Однако sys.maxsize можно использовать как целое число, большее, чем любой практический список или строковый индекс. Он соответствует «естественному» целочисленному размеру реализации и, как правило, совпадает с sys.maxint в предыдущих выпусках на той же платформе (при условии, что используются те же параметры сборки).

http://docs.python.org/3.1/whatsnew/3.0.html#integers


79

Как отмечали другие, Python 3 intне имеет максимального размера, но если вам просто нужно что-то, что гарантированно будет выше, чем любое другое intзначение, тогда вы можете использовать значение с плавающей запятой для Infinity, которое вы можете получить float("inf").


Также работает с устаревшим Python (2.7) - это правильный ответ, когда вам нужно вернуть число, превышающее все возможные реальные значения (например, для сортировки списка путем сравнения объектов)
Aaron D

3
Недостатком этого подхода является то, что float inf может испортить тип данных массивов, если вы пытаетесь применить Jit-компиляцию с Numba, Cython или чем-то подобным. Вам может понадобиться список всех целочисленных типов в Python, чтобы jit-компилятор мог автоматически преобразовать его, например, в соответствующий тип c. Это особенно важно для классических алгоритмов, где вы можете применять инструменты jit, чтобы сделать их намного быстрее, чем чистая реализация Python, но при этом все же захотите написать реализацию на чистом Python для удобства, тестирования, отступления, если jit-компилятор не установлен в развернутой среде. , и т.д.
19

24

Python 3 дюйма не имеют максимума.

Если ваша цель - определить максимальный размер int в C при компиляции таким же образом, как и в Python, вы можете использовать модуль struct, чтобы узнать:

>>> import struct
>>> platform_c_maxint = 2 ** (struct.Struct('i').size * 8 - 1) - 1

Если вам интересно узнать о внутренних деталях реализации int-объектов Python 3, обратите внимание на sys.int_infoбиты на цифру и их размер. Ни одна нормальная программа не должна заботиться об этом.


18

Если вы ищете число, которое больше, чем все остальные:

Способ 1:

float('inf')

Способ 2:

import sys
max = sys.maxsize

Если вы ищете номер, который меньше, чем все остальные:

Способ 1:

float('-inf')

Способ 2:

import sys
min = -sys.maxsize - 1

Метод 1 работает как в Python2, так и в Python3. Метод 2 работает в Python3. Я не пробовал метод 2 в Python2.


3

В Python 3.0 больше нет sys.maxint, поскольку целые числа Python 3 имеют произвольную длину. Вместо sys.maxint он имеет sys.maxsize; максимальный размер положительного размера size_t aka Py_ssize_t.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.