¿Qué es sys.maxint en Python 3?

162

He estado tratando de descubrir cómo representar un número entero máximo, y he leído para usar "sys.maxint". Sin embargo, en Python 3 cuando lo llamo obtengo:

AttributeError: module 'object' has no attribute 'maxint'
Ci3
fuente
Posible duplicado de valores máximos y mínimos para ints
Georgy

Respuestas:

172

Se eliminó la constante sys.maxint, ya que ya no hay un límite para el valor de los enteros. Sin embargo, sys.maxsize puede usarse como un entero más grande que cualquier lista práctica o índice de cadena. Se ajusta al tamaño entero "natural" de la implementación y suele ser el mismo que sys.maxint en versiones anteriores en la misma plataforma (suponiendo las mismas opciones de compilación).

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

Diego Basch
fuente
79

Como señalaron otros, Python 3 intno tiene un tamaño máximo, pero si solo necesita algo que sea más alto que cualquier otro intvalor, puede usar el valor flotante para Infinity, con el que puede obtener float("inf").

mwfearnley
fuente
También funciona con Python heredado (2.7): esta es la respuesta correcta cuando necesita devolver un número más alto que todos los valores reales posibles (por ejemplo, para ordenar la lista mediante la comparación de objetos)
Aaron D
3
Una desventaja de este enfoque es que float inf puede arruinar el tipo de datos de las matrices si está tratando de aplicar la compilación jit con numba o Cython o similar. Es posible que necesite una lista de Python de todos los tipos enteros para que un compilador jit pueda convertirlo automáticamente al tipo c apropiado, por ejemplo. Esto es especialmente crítico para los algoritmos clásicos en los que puede aplicar herramientas jit para que sean mucho más rápidos que una implementación pura de Python, pero aún así desea escribir la implementación en Python puro por conveniencia, prueba, respaldo si el compilador jit no está instalado en un entorno implementado , etc.
ely
24

Python 3 ints no tienen un máximo.

Si su propósito es determinar el tamaño máximo de un int en C cuando se compila de la misma manera que Python, puede usar el módulo de estructura para averiguar:

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

Si tiene curiosidad sobre los detalles de implementación interna de los objetos int de Python 3, busque sys.int_infobits por dígito y detalles de tamaño de dígito. Ningún programa normal debería preocuparse por estos.

GPS
fuente
18

Si está buscando un número que sea más grande que todos los demás:

Método 1:

float('inf')

Método 2:

import sys
max = sys.maxsize

Si está buscando un número que sea más pequeño que todos los demás:

Método 1:

float('-inf')

Método 2:

import sys
min = -sys.maxsize - 1

El método 1 funciona tanto en Python2 como en Python3. El método 2 funciona en Python3. No he probado el Método 2 en Python2.

Vikrant
fuente
3

Python 3.0 ya no tiene sys.maxint ya que las entradas de Python 3 son de longitud arbitraria. En lugar de sys.maxint tiene sys.maxsize; El tamaño máximo de un tamaño positivo size_t también conocido como Py_ssize_t.

Cookiesfly
fuente
0

Una alternativa es

import math

... math.inf ...
Tom Verhoeff
fuente