Python es un lenguaje de programación de propósito general cuyo principio de diseño central es la legibilidad. No es un accidente que el código Python se parezca tanto al pseudocódigo que escribirías en una servilleta: Guido van Rossum, su creador, tomó decisiones deliberadas para que la sintaxis refleje la intención, no los detalles de la máquina.
A diferencia de C o Java, Python es interpretado: no compilas tu programa antes de ejecutarlo, sino que un intérprete procesa el código línea a línea en tiempo de ejecución. Esto tiene un coste en velocidad pura, pero ganas algo valioso: el ciclo editar-ejecutar-ver resultado es casi instantáneo. Para explorar ideas, prototipar, automatizar tareas o construir backends, esa velocidad de iteración vale más que los nanosegundos que pierdes frente a un binario nativo.
El otro pilar es la tipificación dinámica: las variables no declaran su tipo, simplemente contienen valores. x = 42 y luego x = "hola" es código Python perfectamente válido. Esto te da flexibilidad al escribir, aunque si abusas de ella en proyectos grandes, el código se vuelve difícil de razonar. Por eso el ecosistema moderno usa type hints (desde Python 3.5) para documentar tipos sin perder esa flexibilidad.
¿Cuándo tiene sentido usar Python y cuándo no? Python brilla cuando el cuello de botella no es la CPU sino tu tiempo como desarrollador. Si necesitas procesar señales de audio en tiempo real o escribir un kernel de sistema operativo, Python no es la herramienta. Pero si quieres leer un CSV de un millón de filas y entrenar un modelo, automatizar un flujo de trabajo que hoy haces a mano, o levantar una API REST en una tarde, Python es difícil de superar.
En producción hoy mismo, Python vive en sitios muy concretos:
- Ciencia de datos y ML: NumPy, pandas, scikit-learn, PyTorch y TensorFlow son Python. Los investigadores escriben en Python, los ingenieros de ML despliegan en Python. Es el idioma nativo de ese ecosistema.
- Backends web: Django y FastAPI mueven tráfico real en empresas grandes. Instagram corrió durante años sobre Django.
- Automatización y scripting: si tienes una tarea repetitiva que involucra archivos, APIs, bases de datos o la línea de comandos, un script Python de 40 líneas puede reemplazar horas de trabajo manual.
- DevOps e infraestructura: Ansible está escrito en Python, AWS Lambda lo soporta de primera clase, y la mayoría de herramientas de infraestructura exponen SDKs Python.
# hello.py — primer contacto con el lenguaje
# No hay función main obligatoria; el código de nivel superior se ejecuta directamente.
# Esta es una de las decisiones de diseño que reduce la fricción para empezar.
name = "mundo"
print(f"Hola, {name}") # f-string: interpolación de variables dentro de llaves
# Una lista: colección ordenada, mutable, de elementos heterogéneos
languages = ["Python", "JavaScript", "Go"]
# El bucle for itera sobre cualquier cosa "iterable" — no solo índices
for lang in languages:
print(f" → {lang}")
# Una función: def es la única palabra clave para definirlas
def greet(person: str) -> str:
# El type hint ': str' y '-> str' son documentación, no restricciones duras
return f"Bienvenido, {person}"
print(greet("tú"))
Fíjate en algunas decisiones que este pequeño programa ya revela. No hay llaves {} para delimitar bloques: Python usa indentación significativa. Si el cuerpo de greet no estuviera sangrado, sería un error de sintaxis. Esto no es arbitrario; fuerza a que el código que parece estar dentro de una función realmente lo esté, eliminando una fuente clásica de bugs de C y JavaScript.
El f"Bienvenido, {person}" es una f-string, la forma moderna de construir cadenas con valores interpolados. No necesitas concatenar con + ni formatear con % como en Python 2; el valor de person va directamente dentro de las llaves.
El type hint person: str en la firma de greet merece atención. Python no lo verifica en tiempo de ejecución, pero herramientas como mypy o el propio editor pueden usarlo para detectar errores antes de que ejecutes el código. Es el punto de equilibrio que encontró el ecosistema entre la flexibilidad dinámica y la seguridad de tipos.
Y el print(greet("tú")) demuestra que las funciones son ciudadanos de primera clase: puedes pasar el resultado de una función como argumento de otra, almacenarlos en variables, meterlos en listas. Esta propiedad, heredada de la programación funcional, es central en cómo se escribe Python idiomático.
Errores que debes conocer
Error: Mezclar espacios y tabulaciones para indentar, o indentar de forma inconsistente. Python es estricto con la indentación y lanzará un IndentationError o, peor, ejecutará código que no esperabas.
# ❌ Wrong
def add(a, b):
result = a + b # indentado con 4 espacios
return result # indentado con un tabulador — error
# ✅ Right
def add(a, b):
result = a + b
return result # consistentemente 4 espacios
Configura tu editor para convertir tabulaciones a espacios automáticamente. La convención universal en Python es 4 espacios por nivel de indentación (PEP 8).
Error: Asumir que los type hints imponen restricciones en tiempo de ejecución y omitir validación real cuando la necesitas.
# ❌ Wrong — crees que str protege la función, pero no lo hace
def greet(name: str) -> str:
return f"Hola, {name}"
greet(42) # ejecuta sin error, devuelve "Hola, 42"
# ✅ Right — si necesitas validación, hazla explícita
def greet(name: str) -> str:
if not isinstance(name, str):
raise TypeError(f"name debe ser str, recibí {type(name).__name__}")
return f"Hola, {name}"
Los type hints son para herramientas de análisis estático y documentación, no para el intérprete. Si tu función depende del tipo, valídalo tú mismo.
N° 1