Що таке 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значення, то ви можете використовувати значення float для Infinity, яке ви можете отримати float("inf").


Також працює зі спадщиною Python (2.7) - це правильна відповідь, коли потрібно повернути число, що перевищує всі можливі реальні значення (наприклад, для сортування списку шляхом порівняння об’єктів)
Aaron D

3
Недоліком цього підходу є те, що float inf може зруйнувати тип масивів даних, якщо ви намагаєтесь застосувати компіляцію jit за допомогою numba, Cython або подібних. Можливо, вам знадобиться список Python усіх цілих типів, щоб компілятор jit міг автоматично перетворити його у відповідний тип c, наприклад. Це особливо важливо для класичних алгоритмів, де ви можете застосувати інструменти jit, щоб зробити їх набагато швидшими, ніж чиста реалізація Python, але все одно хочете написати реалізацію в чистому Python для зручності, тестування, резервного копіювання, якщо компілятор jit не встановлений у розгорнутому середовищі тощо
ely

24

Python 3 ints не мають максимуму.

Якщо ваша мета полягає в тому, щоб визначити максимальний розмір int в C, коли компілювався так само, як і Python, ви можете використовувати модуль struct, щоб дізнатися:

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

Якщо вам цікаво детальна інформація про внутрішню реалізацію об'єктів Python 3 int, подивіться на 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.