Python es hoy el lenguaje más enseñado del mundo y el que más gente escribe sin llamarse programadora. Su historia explica las dos cosas: nació para ser legible, y treinta años después esa decisión resultó valer más que casi cualquier otra característica técnica.
🎯 Por qué está en este programa
Python es uno de los diez lenguajes del núcleo: se implementa y se verifica en CI en las 136 clases de código. Esta ficha no repite eso — cuenta su historia y responde a por qué se eligió como representante.
Python es el representante del scripting dinámico (Atlas): tipado dinámico, poca ceremonia, y una biblioteca estándar que cubre casi todo. Quien entiende la versión Python de una clase reconoce después la de Ruby, Perl, Lua, Tcl o R sin haberlas visto. Y es, además, el lenguaje con el que hoy se pega el resto del sistema (clase 155).
| Año | 1991; 2.0 en 2000; 3.0 en 2008; ciclo anual desde 3.9 |
| Autoría | Guido van Rossum, CWI (Ámsterdam), como sucesor de ABC |
| Familia | Scripting dinámico — con influencia de ABC, Modula-3, C y Lisp |
| Paradigma | Multiparadigma: imperativo, orientado a objetos y funcional |
| Tipado | Dinámico y fuerte; anotaciones opcionales comprobadas por herramientas |
| Memoria | Automática: conteo de referencias + recolector de ciclos |
| Ejecución | Compilado a bytecode e interpretado (CPython); PyPy con JIT |
| Estado | 🟢 Dominante en ciencia de datos, IA, automatización y enseñanza |
Guido van Rossum trabajaba en el CWI de Ámsterdam en ABC, un lenguaje de enseñanza muy cuidado que nunca despegó. De ABC se llevó una obsesión —que el código se lea— y una lección: ABC era cerrado y no se podía extender, y por eso murió.
En las navidades de 1989 empezó Python como proyecto personal. El nombre no viene del reptil sino de Monty Python's Flying Circus, y esa broma marcó el tono de toda la documentación durante décadas.
Las decisiones que lo definieron estaban ahí desde el principio: la indentación como sintaxis —el bloque se marca con espacios, no con llaves—, todo es un objeto, y una biblioteca estándar grande, la política de las "baterías incluidas".
Python 2.0 (2000) trajo la comprensión de listas y el recolector de ciclos. Python 3.0 (2008) rompió la compatibilidad para arreglar lo que estaba mal —sobre todo la distinción entre bytes y texto, que en Python 2 era una fuente constante de errores (clase 093)— y la migración costó doce años: el soporte de Python 2 terminó en 2020.
Esa transición es un caso de estudio de la clase 143: una ruptura necesaria, técnicamente correcta y socialmente carísima.
Desde 3.9 hay una versión anual con fecha fija, y el lenguaje ha ido incorporando anotaciones de
tipo (2015), async/await (2015), el operador morsa (2018), el emparejamiento estructural (2021)
y, en marcha, la eliminación del bloqueo global del intérprete.
Python renuncia a cosas que otros lenguajes consideran irrenunciables, y cada renuncia compra legibilidad:
end: la indentación es el bloque. Elimina de golpe la discusión de estilo y
hace imposible que el sangrado mienta sobre la estructura.++, ni operador ternario con ?:.self explícito en los métodos: se ve de dónde viene cada atributo.Y el coste hay que decirlo con la misma claridad:
El precio es el rendimiento y la concurrencia. CPython interpreta bytecode y tiene un bloqueo global del intérprete (el GIL) que impide que dos hilos ejecuten bytecode a la vez. Por eso el Python que va rápido casi nunca es Python: NumPy, PyTorch y pandas son C, C++ y Fortran por debajo (clase 155), y Python es la capa que los compone. Entender eso es entender por qué el lenguaje "lento" domina el cálculo intensivo.
mypy, pyright, ty. El tipado sigue siendo
dinámico en ejecución, pero el análisis previo caza una familia entera de errores — es la misma
idea que la clase 146 defiende para todos los lenguajes.async/await y el ecosistema asíncrono (asyncio, anyio, FastAPI) — clase 134.match/case) desde 3.10, al estilo ML.ruff (análisis y formato), uv
(gestor de paquetes y entornos), que han reducido de minutos a segundos operaciones cotidianas.python3 main.py < entrada.txt # el comando de la clase 041
# Entorno y dependencias reproducibles (clase 143):
uv venv && uv pip install -r requirements.txt
uv run main.py
# Calidad, como en la clase 146:
ruff check . && ruff format --check .
mypy .
pytest
Es el que se ejecuta y se verifica en la clase 041.
import sys
# Literales y constantes: los valores se leen y se nombran.
precio_str, cantidad_str, descuento_str = sys.stdin.readline().split()
PRECIO_UNITARIO = float(precio_str) # tipo dinámico, inferido en tiempo de ejecución
CANTIDAD = int(cantidad_str)
DESCUENTO = float(descuento_str)
subtotal = PRECIO_UNITARIO * CANTIDAD
total = subtotal * (1 - DESCUENTO)
print(f"Total: {total:.2f}")
Lo que hay que ver, comparando con las otras fichas.
PRECIO_UNITARIO en mayúsculas no es una constante: es una convención. Python no tiene
constantes (clase 041), y esa ausencia es una decisión: el lenguaje confía en el acuerdo y no
en el compilador. Compárese con Ada, donde una constante es un tipo con dominio.float, int) porque Python tiene tipado fuerte: "3" + 4 es
un error, a diferencia de JavaScript o PHP (clase 100).f"{total:.2f}" es interpolación con formato; la misma familia de %.2f que aparece en casi
todas las fichas, con otra sintaxis.⏮️ Volver al Atlas · 🗂️ Todas las fichas · 🔗 Relacionadas: Ruby · Perl · Lua · C · Julia