long float decimales python integer

float - long python 3



¿Cómo maneja Python int y long? (7)

¿Alguien sabe cómo Python administra internamente int y long types?

  • ¿Elige el tipo correcto de forma dinámica?
  • ¿Cuál es el límite para un int?
  • Estoy usando Python 2.6, ¿Es diferente con versiones anteriores?

¿Cómo debería entender el código a continuación?

>>> print type(65535) <type ''int''> >>> print type(65536*65536) <type ''long''>

Actualizar:

>>> print type(0x7fffffff) <type ''int''> >>> print type(0x80000000) <type ''long''>


Desde python 3.x, las librerías enteras unificadas son aún más inteligentes que las versiones anteriores. En mi (i7 Ubuntu) caja obtuve lo siguiente,

>>> type(math.factorial(30)) <class ''int''>

Para detalles de implementación, consulte Include/longintrepr.h, Objects/longobject.c and Modules/mathmodule.c files. El último archivo es un módulo dinámico (compilado en un archivo so). El código está bien comentado a seguir.


En mi máquina:

>>> print type(1<<30) <type ''int''> >>> print type(1<<31) <type ''long''> >>> print type(0x7FFFFFFF) <type ''int''> >>> print type(0x7FFFFFFF+1) <type ''long''>

Python usa ints (enteros con signo de 32 bits, no sé si son C ints bajo el capó o no) para valores que se ajustan a 32 bit, pero cambia automáticamente a longs (arbitrariamente gran cantidad de bits, es decir, bignums) para cualquier cosa más grande. Supongo que esto acelera las cosas para valores más pequeños, evitando cualquier desbordamiento con una transición sin problemas a bignums.


Esta PEP debería ayudar.

En pocas palabras, realmente no debería preocuparse en versiones de Python> 2.4


Interesante. En mi caja de 64 bits (i7 Ubuntu):

>>> print type(0x7FFFFFFF) <type ''int''> >>> print type(0x7FFFFFFF+1) <type ''int''>

Adivina pasos hasta 64 bits de entrada en una máquina más grande.


Los maneja porque int y long son definiciones de clase hermano. Tienen métodos apropiados para +, -, *, /, etc., que producirán resultados de la clase apropiada.

Por ejemplo

>>> a=1<<30 >>> type(a) <type ''int''> >>> b=a*2 >>> type(b) <type ''long''>

En este caso, la clase int tiene un método __mul__ (el que implementa *) que crea un resultado long cuando es necesario.


Python 2.7.9 auto promueve los números. Para un caso en el que no está seguro de usar int () o long ().

>>> a = int("123") >>> type(a) <type ''int''> >>> a = int("111111111111111111111111111111111111111111111111111") >>> type(a) <type ''long''>


int y long fueron "unificadas" algunas versiones atrás . Antes de eso, era posible desbordar un int a través de operaciones de matemáticas.

3.x ha avanzado aún más eliminando int por completo y solo teniendo long.

Python 2: sys.maxint contiene el valor máximo que puede contener Python int.

Python 3: sys.maxsize contiene el valor máximo que puede contener Python int.