2011-01-03 16 views
63

En Python, ¿hay alguna manera de obtener el entero más grande que se pueda usar? ¿Hay alguna constante predefinida como INT_MAX?Rangos enteros de Python

Respuesta

114

Python tiene enteros de precisión arbitrarios, por lo que no existe un verdadero máximo fijo. Solo está limitado por la memoria disponible.

En Python 2, hay dos tipos, int y long. int s usan un tipo C, mientras que long s son de precisión arbitraria. Puede usar sys.maxint para encontrar el máximo de int. Pero int s automáticamente se transfieren a long, por lo que normalmente no es necesario preocuparse por ello:

sys.maxint + 1 

funciona bien y devuelve un long.

sys.maxint ni siquiera existe en Python 3, ya que int y long se unificaron en un solo tipo de precisión arbitraria int.

+26

Tenga en cuenta que en Python 3 (y Python 2.6 y superior) 'sys.maxsize' se puede usar cuando necesita un valor arbitrariamente grande. – mattdm

+0

¿hay uno que no sea largo? –

+0

'sys.maxsize' sigue siendo el límite teórico sobre el tamaño de los contenedores para python 2 y 3 (teórica porque la memoria es el factor limitante real) –

0
import re 
import sys 
import platform 
import struct 

formats = { 
      "int":{"p_type":"integer", "format":"i"}, 
      "float":{"p_type":"float", "format":"f"}, 
      "double":{"p_type":"float", "format":"d"} 
      }  

sys_bit = int(re.findall(r"\d+", platform.architecture()[0])[0])/8 
for k,v in formats.iteritems(): 
    print "max {0} {1}".format(k, 2**struct.Struct(v["format"]).size*sys_bit-1)-1) 
    print "min {0} {1}".format(k, -2**struct.Struct(v["format"]).size*sys_bit-1)) 
Cuestiones relacionadas