Todas las lecciones
54 lecciones publicadas. Cada una incluye un laboratorio para ejecutar el código del que habla.
Python desde cero
Primeros pasos
Tu primer programa
Cómo se ejecuta Python, qué hace print() y por qué el primer programa de cualquier curso es el mismo desde hace 45 años.
Leer un error sin miedo
El traceback de Python no es un castigo: es un mapa. Aprende a leerlo de abajo arriba y te ahorra horas de adivinar.
Variables: dar nombre a los datos
Un programa que no guarda nada no puede hacer nada. Las variables son las cajas con nombre donde guardas los datos de tu programa.
Los tipos básicos
Todo dato en Python tiene un tipo: entero, decimal, texto o booleano. Aprende a distinguirlos con type() y a no mezclarlos.
Python desde cero
Operadores y expresiones
Operadores aritméticos
Sumar, restar, multiplicar y dividir suena trivial hasta que / no da lo que esperabas: división real, entera, resto y potencias.
Comparación y operadores lógicos
Los programas deciden con booleanos: comparar con == y combinar con and, or y not. La base de todo if que escribirás.
Precedencia y conversión de tipos
Por qué 2 + 3 * 4 no es 20: el orden en que Python calcula y cómo convertir entre tipos con int(), float() y str().
Python desde cero
Cadenas de texto
Formatear texto con f-strings
Mezclar variables con texto sin pelearte con comas ni concatenaciones: f-strings, formato de decimales y alineación.
Índices y slicing
Cada letra tiene su posición: leer caracteres sueltos con [0], trozos con [a:b] y darle la vuelta a un texto con [::-1].
Métodos de cadena
Los métodos transforman texto sin tocar posiciones: mayúsculas, minúsculas, quitar espacios, buscar y reemplazar. El cuchillo suizo del texto.
Python desde cero
Decisiones: condicionales
if, elif y else
Hacer que el programa elija qué hacer: la lógica de decisión básica con if, elif y else.
Qué considera Python verdadero
No solo True y False: listas vacías, 0, None, cadenas vacías... aprende la regla de los "valores falsy" para escribir condiciones limpias.
El operador ternario
Condicional en una línea: valor_si_verdadero if condicion else valor_si_falso. Útil, pero con moderación.
Python desde cero
Repetición: bucles
for y range
Repetir sin copiar: iterar sobre secuencias con for y generar números con range().
El bucle while
Repetir mientras se cumpla una condición. Ideal cuando no sabes cuántas vueltas darás.
break, continue y else
Controlar el flujo dentro del bucle: saltar iteraciones, salir antes y detectar si terminó sin break.
Python desde cero
Colecciones I: listas
Crear y leer listas
La estructura de datos más usada en Python: ordenada, mutable y admite cualquier tipo mezclado.
Métodos de lista
append, extend, insert, pop, remove, clear, index, count, sort, reverse, copy: la herramienta completa para manipular listas.
List comprehensions
Crear listas en una línea transformando y filtrando: [expr for x in iterable if condicion]. La forma pythonica de mapear y filtrar.
Python desde cero
Colecciones II: tuplas, conjuntos y diccionarios
Tuplas y desempaquetado
Listas inmutables que protegen tus datos y permiten asignación múltiple: x, y = punto.
Conjuntos: elementos sin repetir
Set: colección desordenada, sin duplicados, con operaciones de teoría de conjuntos (unión, intersección, diferencia).
Diccionarios: clave y valor
La tabla hash de Python: acceso O(1) por clave, mutable, ordenada (desde 3.7). La estructura más versátil tras la lista.
Python desde cero
Funciones
Definir y llamar funciones
La unidad de trabajo del programador: encapsular lógica, evitar repetición y dar nombres a las cosas.
Parámetros y valores por defecto
Posicionales, nombrados, *args, **kwargs, valores por defecto mutables (la trampa), y keyword-only arguments.
Qué devuelve una función
return devuelve valor y sale; sin return devuelve None; múltiples valores = tupla. Diferencia entre imprimir y devolver.
Ámbito: dónde vive una variable
LEGB: Local, Enclosing, Global, Built-in. Por qué x=1 dentro de una función no cambia la x de fuera, y cómo usar global/nonlocal cuando de verdad hace falta.
*args y **kwargs
Funciones flexibles: *args recoge posiciones extra en tupla, **kwargs recoge keywords extra en dict. Desempaquetar al llamar con * y **.
Lambdas y funciones de orden superior
Funciones anónimas (lambda) y funciones que reciben/devuelven funciones: map, filter, sorted(key=...), y el patrón decorador.
Python desde cero
Proyecto 1: programa de consola
Python desde cero
Módulos y estructura de proyectos
Importar: la biblioteca estándar
import, from ... import, alias, importar módulos propios. La biblioteca estándar: os, sys, json, random, datetime, pathlib...
Cómo se organiza un proyecto
Paquetes, __init__.py, estructura src/, tests/, pyproject.toml, venv. De script suelto a proyecto instalable.
Python desde cero
Errores y archivos
Manejar excepciones
try/except/else/finally, capturar excepciones específicas, lanzar excepciones (raise), crear excepciones propias. Que el programa no se caiga.
Leer y escribir archivos
open() con with, modos (r, w, a, rb, wb), encoding UTF-8, read/readline/readlines, write/writelines, pathlib.Path.read_text/write_text.
Python desde cero
Clases y objetos
Clases y objetos
Definir clases con class, crear instancias, atributos de instancia vs clase, __init__, representación (repr/str). Modelar conceptos del mundo real.
Métodos y self
Funciones dentro de la clase que operan sobre la instancia. self es el primer argumento implícito. Métodos de instancia, de clase (@classmethod) y estáticos (@staticmethod).
Herencia y super()
Crear subclases que heredan de una clase base. Sobrescribir métodos, llamar al padre con super(), herencia múltiple, MRO. Principio Liskov.
property y métodos mágicos (dunder)
@property para getters/setters elegantes, @setter, @deleter. Métodos dunder: __eq__, __hash__, __len__, __getitem__, __iter__, __call__, __bool__, __enter__/__exit__ (context manager).
Python desde cero
Decoradores y generadores
Generadores e iteradores
Crear secuencias perezosas con yield, el protocolo de iteración y itertools para pipelines de datos eficientes.
Decoradores
Funciones que envuelven otras funciones: sintaxis @, argumentos, functools.wraps, casos de uso reales (timer, cache, retry, validación).
Python desde cero
Prácticas profesionales
Anotaciones de tipos
Type hints: sintaxis, genéricos, Union, Optional, TypedDict, Protocol. Herramientas: mypy, pyright. Ventajas: documentación viva, refactor seguro, IDEs inteligentes.
Docstrings
Convenciones: Google, NumPy, Sphinx. Qué documentar: módulos, clases, funciones, argumentos, excepciones, ejemplos. Herramientas: pdoc, Sphinx, mkdocstrings. Doctest: tests en la documentación.
Testing básico con unittest y pytest
Escribir tests unitarios: unittest (stdlib), pytest (ecosistema). Fixtures, parametrización, mocks, cobertura. Organización: test_*.py, estructura AAA. Buenas prácticas: rápidos, aislados, deterministas.
Logging en vez de print
Módulo logging: niveles, handlers, formatters, filtros, configuración por dict/fileConfig. Structlog para logging estructurado (JSON). Rotación de archivos. Buenas prácticas: qué loguear, niveles, contexto.
Git, ruff y pytest: el taller
Flujo Git profesional: commits atómicos, convenciones, ramas, PRs. Calidad automatizada: ruff (lint+format), pytest (tests), pre-commit hooks. CI/CD básico con GitHub Actions.
Python desde cero
Entorno: pip y dependencias
pip y PyPI: instalar librerías
El gestor de paquetes de Python: buscar, instalar, actualizar y desinstalar paquetes desde PyPI.
Entornos virtuales y requirements
Aislar dependencias por proyecto con venv: crear, activar, desactivar y usar requirements.txt para compartir entornos.
Python desde cero
Biblioteca estándar
Rutas con pathlib
Manipulación orientada a objetos de rutas de archivos: unir, separar, leer, escribir, comprobar existencia y recorrer directorios.
Fechas, tiempos y colecciones útiles
datetime para fechas y horas, timedelta para aritmética temporal, y collections para estructuras avanzadas: Counter, defaultdict, deque, namedtuple.
Python desde cero
HTTP y APIs
Peticiones HTTP con requests
La librería requests: GET, POST, PUT, DELETE, parámetros, headers, JSON, manejo de errores, timeouts y sesiones.
Consumir una API real
Patrones reales: autenticación, paginación, rate limiting, reintentos con backoff, validación de respuesta y manejo robusto de errores.
Python desde cero
Datos: CSV y JSON
CSV: leer y escribir tablas
El módulo csv: reader, writer, DictReader, DictWriter. Leer, escribir, filtrar y transformar datos tabulares. Manejo de encoding, delimitadores y comillas.
JSON y resúmenes con statistics
Serializar/deserializar JSON, pretty-print, claves no-string, datetime. Módulo statistics: media, mediana, moda, desviación, varianza, cuantiles.
Python desde cero
Proyecto 2: proyecto final
Gestor de tareas en consola
Proyecto integrador: CRUD de tareas con prioridades, fechas, categorías, persistencia en JSON, búsqueda, filtrado y estadísticas.
Cliente de API con caché local
Proyecto avanzado: cliente HTTP robusto con caché en SQLite, rate limiting automático, reintentos, paginación y CLI interactiva.