- Python ofrece tipos numéricos básicos (int, float, complex, bool) además de potentes funciones auxiliares como math, cmath, decimal y random para cálculos cotidianos.
- El módulo numbers define clases base abstractas, de modo que muchos tipos numéricos integrados, de NumPy y personalizados pueden tratarse de forma uniforme como instancias de Number.
- Los modos de redondeo, los valores especiales (NaN, infinitos) y la aritmética decimal exacta mediante decimal son cruciales para un código científico y financiero robusto.
- El ecosistema numérico de Python, en particular NumPy, amplía los tipos básicos con enteros de ancho fijo y matrices de alto rendimiento para cálculos complejos.
Trabajar con números es fundamental en la mayoría de los programas de Python.Ya sea que estés creando un script sencillo, procesando datos científicos o creando un prototipo de algoritmo, comprender cómo Python representa y manipula los valores numéricos es el primer paso para escribir código confiable y eficiente que se comporte como esperas.
Cuando la gente habla de “Python numérico”, a menudo se refieren a dos cosas.: por un lado, los tipos de números integrados y las herramientas de la biblioteca estándar como math, cmath, decimal, random y numbersPor otro lado, está el ecosistema más amplio que rodea la computación numérica, con bibliotecas como NumPy que extienden el lenguaje con tipos numéricos adicionales y operaciones vectorizadas. Esta guía le explicará en detalle esta base, desde los tipos básicos hasta las abstracciones avanzadas.
Tipos numéricos básicos en Python
Python define varias categorías numéricas integradas que cubren la mayoría de las necesidades cotidianas.Los tipos de datos son: enteros para números enteros, números de coma flotante para valores reales con decimales, números complejos para valores con partes reales e imaginarias, y el tipo especial booleano que se comporta como un miembro muy pequeño de la familia de los enteros. Todos ellos se integran perfectamente con los operadores aritméticos de Python.
Números enteros (int) representan números enteros, positivos o negativos, sin punto decimal.No existe un límite superior fijo para su tamaño en Python estándar; siempre que tengas memoria, tu entero puede crecer. Valores como 1, -5 or 20234567890123456789 son todos válidos int instancias, y puedes confirmarlo con type(1) or type(-5), que volverá <class 'int'>.
Números de punto flotante (float) se utilizan para números reales con una parte fraccionariaSe escriben con un punto decimal, como por ejemplo: 2.0, -7.823457 or 0.5o con notación científica como 1e8 (lo que significa 100,000,000). Cuando realizas operaciones como la división, incluso entre enteros, Python a menudo promueve el resultado a un float; por ejemplo, 9 / 2 los rendimientos 4.5, y type(4.5) is <class 'float'>.
Números complejos (complex) combinar una parte real y una parte imaginaria, escrito con un final j para la unidad imaginaria. Un valor como 2 + 3j tiene un componente real 2 y un componente imaginario 3. Puedes construirlos directamente (por ejemplo 3.14j) e inspeccionarlos con atributos como .real y .imag, O llame al .conjugate() para obtener el conjugado complejo. Estos son particularmente populares en ingeniería, procesamiento de señales y computación científica.
Booleanos (bool) son técnicamente numéricos también, porque True y False se comportan como los números enteros 1 y 0 en expresiones aritméticas. Por ejemplo, True + 2 evalúa a 3. Internamente, bool es una subclase de intPor eso, los valores booleanos se integran a la perfección en cálculos y comparaciones.
Python permite combinar libremente estos tipos numéricos en expresiones., promoviendo a un tipo más general cuando sea necesario. Añadiendo un int a una float produce un floaty la combinación de números de coma flotante con números complejos produce un resultado complejo: expresiones como 1 + 1.0, 2.0 + (3 + 5j) or 6 / (5 + 8j) Todo funciona sin ceremonias adicionales.

Operadores aritméticos y comportamiento de la división
Una vez que tengas valores numéricos, utiliza los operadores aritméticos habituales para trabajar con ellos.: suma (+), resta (-), multiplicación (*), división (/), división de pisos (//), exponenciación (**) y módulo (%Python aplica estas conversiones a números enteros, de coma flotante y complejos, realizando la promoción de tipos según sea necesario.
La división es un área donde el diseño de Python es muy deliberado.. Utilizando / Siempre produce un resultado de punto flotante cuando ambos argumentos son numéricos, incluso si ambos son enteros. Por lo tanto, 9 / 2 resultados en 4.5no, 4Esto te anima a pensar por defecto en términos de división de números reales, que es lo que normalmente se busca en cálculos científicos o financieros.
Si necesita una división entera que descarte la parte fraccionaria, utilice el operador de división por piso. //. Por ejemplo, 9 // 2 produce 4, y -9 // 2 los rendimientos -5, ya que el resultado se redondea hacia abajo (hacia el infinito negativo). Además, divmod(a, b) te da tanto el cociente como el resto a la vez, devolviendo un par que refleja (a // b, a % b).
Detrás de escena, Python coordina cuidadosamente cómo interactúan los diferentes tipos de números.Un patrón interno que se puede observar en la biblioteca estándar es la idea de "operadores alternativos": funciones que primero intentan una implementación específica del tipo, por ejemplo, para números racionales, y luego recurren a operadores integrados cuando un operando es un número normal. int, float or complexEsto es lo que permite que los tipos numéricos personalizados interactúen con el sistema aritmético de Python utilizando métodos especiales como __add__ y __radd__.
Código de biblioteca para aritmética racional, como por ejemplo: Fraction Este tipo ilustra claramente esta estrategia.. Al sumar dos Fraction En algunos casos, calcula una nueva fracción mediante la multiplicación cruzada de numeradores y denominadores. Si agregas un Fraction a un número entero simple o instancia de numbers.Rational, utiliza el algoritmo racional preciso. Si el otro operando es un float or complex, se convertirá a ese tipo más amplio y delegará en los operadores habituales, manteniendo un comportamiento coherente e intuitivo.
Funciones numéricas integradas
Más allá de los operadores básicos, Python incluye un conjunto de funciones integradas que saben cómo manejar números.Estas funciones están siempre disponibles sin necesidad de importar nada y funcionan con los tipos numéricos estándar, además de con cualquier objeto personalizado que implemente los métodos especiales adecuados.
abs(x) devuelve el valor absoluto de su argumento, convirtiendo los números negativos en positivos y dejando los valores positivos sin cambios. Si pasa un objeto que define __abs__()Python delegará en ese método. Para números complejos, abs() Devuelve la magnitud (la distancia desde el origen en el plano complejo).
round(x, ndigits) te da un valor redondeado a un número determinado de decimales.. Si ndigits se omite o None, devuelve el entero más cercano. A diferencia de la regla de los libros de texto de "redondear a la mitad hacia arriba", la función integrada de Python round Utiliza una estrategia de "redondeo al medio más cercano" para los empates, con el fin de reducir el sesgo estadístico en los cálculos repetidos.
Funciones de conversión como int() y float() construir números a partir de otros objetosLlamando int(x) en un flotante descarta la parte fraccionaria (por ejemplo, int(1.9) is 1), o float(x) Genera una representación de punto flotante a partir de enteros, cadenas u objetos compatibles. Al convertir de float a int, no se produce ningún redondeo; simplemente se trunca la parte decimal.
Otras funciones integradas cumplen funciones de representación y agregación.Funciones como hex() y oct() devuelve representaciones en cadena de enteros en hexadecimal u octal con los prefijos apropiados (0x y 0o). Ayudantes de agregación como max() y min() escanear un iterable o una serie de argumentos para encontrar el valor más grande o más pequeño, mientras pow() y conectar ** El operador calcula potencias y, opcionalmente, acepta un tercer argumento para la exponenciación modular.
Herramientas numéricas avanzadas: matemáticas, cmath y decimal
Para cálculos más sofisticados, Python proporciona módulos de biblioteca estándar específicos. en lugar de sobrecargar el lenguaje principal. Los más importantes para el trabajo numérico son: math, cmath y decimal, cada uno enfocado en un subconjunto particular de problemas.
El math Este módulo se centra en las matemáticas de punto flotante de valor real.. Después de importarlo con import math, obtienes acceso a funciones y constantes comúnmente necesarias en ingeniería, física y análisis cotidianos, todo implementado en código C eficiente y que funciona en float valores.
math Incluye herramientas de teoría de números y de representación. como math.ceil() para redondear al entero más cercano, math.floor() para redondear hacia abajo, math.modf() para dividir un número flotante en partes fraccionarias y enteras, y math.frexp() / math.ldexp() para trabajar con la representación binaria interna. También proporciona rutinas de potencia y logarítmicas como math.exp(), math.log(), math.log10(), math.pow() y math.sqrt(), así como funciones trigonométricas e hiperbólicas como math.sin(), math.cos(), math.tan(), math.asin(), math.acos(), math.atan(), math.atan2(), math.sinh(), math.cosh() y math.tanh().
Por conveniencia, math exportaciones constantes fundamentales como math.pi y math.eEstas funciones son útiles siempre que calcules áreas, ángulos o crecimiento exponencial y quieras obtener valores consistentes con buena precisión en todo tu código.
Cuando necesitas trabajar con números complejos, cmath El módulo desempeña el mismo papel para el plano complejo.. Su API refleja math pero utiliza argumentos complejos y devuelve resultados complejos, por lo que puede calcular exponenciales, logaritmos y funciones trigonométricas complejas sin descomponer manualmente los números en partes reales e imaginarias.
El decimal El módulo apunta a un problema diferente: la aritmética exacta en base 10.El sistema de punto flotante binario estándar no puede representar con precisión muchas fracciones decimales, por lo que cálculos como 0.1 + 0.2 arrojará un resultado ligeramente diferente. decimal.Decimal Esto se evita mediante el uso de aritmética de base 10 de precisión arbitraria, lo que lo hace ideal para aplicaciones financieras y en cualquier lugar donde se deba controlar el redondeo con mucha precisión.
Por defecto, las operaciones de punto flotante de Python siguen el comportamiento IEEE-754 y utilizan la representación en base 2.Cuando un valor se encuentra exactamente a la mitad entre dos números representables, se aplica "redondear a la mitad más cercana", lo que significa que la mitad de los empates se redondean hacia abajo y la otra mitad hacia arriba. Esto evita la deriva sistemática en cálculos grandes. Si desea la semántica comercial "redondear a la mitad hacia arriba", puede configurar una decimal contexto para usar ROUND_HALF_UP, lo que siempre desplaza los valores 5 alejándolos de cero.
Trabajar con tipos numéricos en la práctica
Explorar cómo interactúan los números es una excelente manera de desarrollar la intuición.Abre el intérprete de Python y crea una combinación de números enteros, de coma flotante y complejos; luego, prueba operaciones básicas con ellos. Sumar y multiplicar es sencillo, pero resulta especialmente instructivo experimentar con la división, la división entera, el redondeo y las conversiones, observando cómo cambia el tipo de resultado.
En ocasiones, es necesario convertir entre tipos numéricos para cumplir con las expectativas de una API o para simplificar la lógica.. Si tienes un número decimal y solo quieres su parte entera, asígnalo a una variable como my_float = 1.9 y luego llamar my_int = int(my_float). Impresión my_int da 1, y type(my_int) confirma que es un intTenga en cuenta que la parte fraccionaria se descarta en lugar de redondearse.
La dirección inversa —la promoción a un tipo más general— suele ocurrir de forma implícita.Cuando se suman un número entero y un número de coma flotante, Python devuelve un número de coma flotante sin preguntar, ya que el sistema de números reales contiene los enteros. Lo mismo ocurre cuando se combinan un número de coma flotante y un número complejo: el valor de coma flotante se trata como si tuviera una parte imaginaria de cero, y el resultado es un número complejo.
Los números complejos incluyen varias ventajas incorporadas que los hacen sentir naturales.Puedes inspeccionar directamente. a.real y a.imag Para obtener los componentes, llame a.conjugate() para invertir el signo de la parte imaginaria y pasarlos a funciones en cmath Sin conversión manual. Aunque rara vez los uses, saber que existen y cómo funcionan te será útil cuando te encuentres con código científico.
La exactitud y la precisión siempre importan cuando se trabaja con datos de punto flotante.La precisión efectiva de un Python estándar float tiene aproximadamente 15 dígitos decimales; más allá de eso, el dígito 16 puede ser poco fiable. Para muchas tareas, esto es perfectamente aceptable, pero si necesita aritmética decimal exacta o un redondeo más predecible, decimal Este módulo te brinda el control que necesitas a costa de una menor eficiencia.
Números aleatorios y valores numéricos especiales
Generar números aleatorios es otra tarea frecuente en los flujos de trabajo numéricos de Python., ya sea que esté creando juegos simples, ejecutando simulaciones de Monte Carlo o escribiendo casos de prueba que ejerciten condiciones límite. La biblioteca estándar random El módulo proporciona los elementos básicos para este tipo de escenarios.
random.randint(a, b) produce un número entero pseudoaleatorio entre a y bInclusoEsto facilita simular tiradas de dados o elegir índices aleatorios en una lista. Para valores de punto flotante, funciones como random.random() y las funciones auxiliares relacionadas generan números aleatorios uniformes en rangos como [0.0, 1.0), listos para ser escalados o transformados para su distribución particular.
Python también expone algunos valores numéricos que representan cantidades inusuales o de "casos límite".. Uno de ellos es NaN (“No es un número”), que se obtiene, por ejemplo, llamando a float('nan'). NaN indica resultados indefinidos o irrepresentables, como el resultado de dividir cero entre cero o analizar un campo numérico corrupto a partir de datos de entrada.
Además de NaN, Python admite infinito positivo y negativo., construido utilizando float('inf') y float('-inf')Estos valores son útiles como valores centinela al inicializar variables para algoritmos que buscan valores mínimos o máximos, o al modelar rangos ilimitados en métodos numéricos.
Trabajar con NaN requiere especial cuidado porque no se comportan como números regulares.Las comparaciones que involucran NaN siempre son falsas (incluso nan == nan), y la aritmética con NaN tiende a propagar el NaN a través del resultado. Si bien esta guía no profundiza en la semántica de NaN, conocer sus peculiaridades ayuda a depurar flujos de datos y algoritmos numéricos de manera más eficaz.
Jerarquías numéricas abstractas con el módulo de números
A medida que su código se vuelve más sofisticado, es posible que necesite una forma flexible de reconocer valores "numéricos". sin comprobar manualmente cada tipo concreto (como int, float, complex y escalares NumPy). Aquí es donde el numbers El módulo entra en acción, proporcionando una jerarquía abstracta de tipos numéricos.
El numbers El módulo define clases base abstractas (ABC) que describen el comportamiento numérico., como Number, Complex, Real, Rational y IntegralEstas clases no están diseñadas para ser instanciadas directamente. En cambio, los tipos numéricos concretos heredan de ellas para indicar que implementan las operaciones y propiedades requeridas.
El ABC más general es numbers.Number, que representa “cualquier tipo numérico”. Si quieres comprobar si una variable debe tratarse como numérica, por ejemplo durante la depuración o al escribir pequeños scripts de utilidad, puedes combinar isinstance con este ABC. Por ejemplo, isinstance(x, Number) devoluciones True para tipos numéricos integrados y muchos tipos numéricos externos, como varios escalares de NumPy.
Una ilustración práctica utiliza tipos de NumPy junto con las funciones integradas de Python.. Si importa NumPy como np y luego iterar sobre valores como 1, 1., -0.2, 1e8, np.int64(1), np.int0(10), np.int16(2), np.float64(10), np.complex64(10) y np.int32(89)llamando isinstance(value, Number) Para cada uno, verás que todos se consideran numéricos. Esto te ahorra tener que escribir una larga cadena de comprobaciones de tipo para cada clase específica.
Vale la pena señalar que isinstance En sí mismo se considera un "olor" a código cuando se usa en exceso.La dependencia excesiva de la comprobación de tipos explícita puede indicar problemas de diseño más profundos en un programa orientado a objetos. Dicho esto, para una depuración rápida, scripts exploratorios o pequeñas utilidades, comprobar contra numbers.Number Es una herramienta potente y práctica para verificar que tus variables se comportan realmente como números.
Ecosistemas numéricos extendidos: NumPy y tipos personalizados
Aunque Python básico expone solo un pequeño conjunto de tipos numéricos de propósito general, el ecosistema más amplio amplía enormemente sus opciones.NumPy, en particular, introduce muchas más variantes numéricas diseñadas para realizar cálculos eficientes sobre grandes matrices y arreglos.
NumPy define tipos enteros de ancho fijo como numpy.int64, numpy.int32, numpy.int16 y alias especializados como numpy.int0Estos tipos se asemejan a los que se encuentran en lenguajes de bajo nivel orientados numéricamente, como Fortran y C, donde conocer el tamaño de almacenamiento exacto y el comportamiento de los números es esencial para el rendimiento y la interoperabilidad.
Además de los enteros, NumPy ofrece tipos como numpy.float64 y numpy.complex64, junto con muchos otros, que se integran perfectamente con matrices y ufuncs (funciones universales). Estos tipos suelen registrarse como instancias de los ABC apropiados del numbers módulo, por eso las comprobaciones contra numbers.Number trabajar como se ilustró anteriormente.
El diseño de Python mantuvo intencionalmente el modelo numérico central simple y accesible.En lugar de obligar a cada usuario a gestionar docenas de tipos numéricos distintos, se centra en tres tipos numéricos básicos (más los booleanos), facilitando a las bibliotecas especializadas la ampliación de este repertorio según sea necesario. Un entorno orientado a la ingeniería, como el desarrollado por una empresa de software de simulación, dependerá en gran medida de estos tipos y bibliotecas ampliados.
Si crea sus propias clases numéricas, siguiendo los patrones de numbers y fractions te ayuda a integrarte en el ecosistema. Mediante la creación de subclases del ABC apropiado y la implementación de los métodos especiales requeridos (__add__, __radd__, __mul__(y así sucesivamente), sus tipos personalizados pueden interactuar de forma natural con los operadores de Python, las funciones numéricas integradas y otras bibliotecas numéricas.
En conjunto, Python numérico combina un sistema de tipos central limpio, potentes módulos de biblioteca estándar y un rico ecosistema de bibliotecas. Al igual que NumPy, crea un entorno donde puedes pasar cómodamente de la aritmética básica a cálculos de ingeniería avanzados. Una vez que comprendas cómo se relacionan los números enteros, de coma flotante, complejos, los valores especiales, las reglas de redondeo y las clases numéricas abstractas, podrás razonar con mayor seguridad sobre tu código, evitar errores sutiles y elegir las herramientas adecuadas para cada tarea numérica.