Referencia de Problema / Solución
Búsqueda rápida de tareas comunes de Python mapeadas a soluciones idiomáticas y listas para producción para Python 3.14.
Receta
Usa Ctrl+F para buscar tu problema. Copia la solución. Adapta los nombres a tu proyecto.
Cuándo usar esto:
- Momentos de "¿Cómo hago X en Python?" durante la implementación
- Estandarización de revisiones de código
- Referencia rápida para la incorporación (onboarding)
Tabla de Problema / Solución
| Problema | Solución Idiomática |
|---|---|
| Leer un archivo | Path("f.txt").read_text(encoding="utf-8") |
| Escribir un archivo | Path("f.txt").write_text(data, encoding="utf-8") |
| Listar archivos recursivamente | Path("dir").rglob("*.py") |
| Solicitud HTTP GET | httpx.get(url, timeout=30.0) |
| HTTP Asíncrono | async with httpx.AsyncClient() as c: await c.get(url) |
| Analizar JSON | json.loads(text) o response.json() |
| Validar configuración | Pydantic BaseSettings o BaseModel |
| Herramienta CLI | Typer o Click con [project.scripts] |
| Ejecutar pruebas | uv run pytest |
| Formatear código | uv run ruff format . |
| Revisar código (lint) | uv run ruff check --fix . |
| Comprobar tipos | uv run mypy src/ |
| Caché de resultados de funciones | @lru_cache(maxsize=128) |
| I/O en paralelo | asyncio.gather(*tasks) |
| CPU en paralelo | ProcessPoolExecutor |
| Archivo temporal seguro | tempfile.NamedTemporaryFile(delete=False) |
| Variable de entorno con valor por defecto | os.environ.get("KEY", "default") |
| Registrar estructurado | logging.getLogger(__name__).info("msg", extra={...}) |
| Reintentar en caso de fallo | @retry de tenacity o manual con backoff |
| Analizar fecha y hora | datetime.fromisoformat(s) o dateutil.parser |
| Elementos únicos conservando el orden | list(dict.fromkeys(items)) |
| Aplanar lista anidada | [x for sub in nested for x in sub] |
| Contar ocurrencias | collections.Counter(items) |
| Agrupar por clave | itertools.groupby(sorted(items, key=k), key=k) o defaultdict |
| Fusionar diccionarios | {**d1, **d2} o d1 | d2 (3.9+) |
| Dataclass rápidamente | @dataclass(frozen=True, slots=True) |
| Constantes Enum | class Color(Enum): RED = "red" |
| Gestor de contexto | Decorador @contextmanager |
| Subproceso de forma segura | subprocess.run(cmd, check=True, capture_output=True) |
| Cargar .env | pydantic-settings con env_file=".env" |
| Probar API HTTP | TestClient(app) (FastAPI) |
| Simular llamada externa | @patch("mymodule.httpx.get") |
| Serializar dataclass | dataclasses.asdict(obj) |
| Copia profunda | copy.deepcopy(obj) |
| Comprobar tipo en tiempo de ejecución | isinstance(x, MyClass) no type(x) == MyClass |
| Ordenar diccionario por valor | sorted(d.items(), key=lambda kv: kv[1]) |
| Leer CSV | csv.DictReader(open("f.csv")) o polars.read_csv("f.csv") |
| Leer parquet | polars.read_parquet("f.parquet") o pd.read_parquet |
| Generar UUID | uuid.uuid4() |
| Hashear contraseña | argon2.PasswordHasher().hash(password) |
| Token seguro | secrets.token_urlsafe(32) |
| Analizar URL | urllib.parse.urlparse(url) |
| Medir tiempo de una función | time.perf_counter() antes/después |
| Perfilar CPU | cProfile.run("main()") |
| Instalar paquete | uv add package |
| Bloquear dependencias | uv lock && uv sync --frozen |
Ejemplo de Trabajo
"""Patrones comunes combinados en un script realista."""
from __future__ import annotations
import logging
from functools import lru_cache
from pathlib import Path
import httpx
from pydantic import BaseModel
logging.basicConfig(level=logging.INFO)
log = logging.getLogger(__name__)
class Config(BaseModel):
api_url: str = "https://api.example.com"
cache_size: int = 128
@lru_cache(maxsize=128)
def fetch_status(base_url: str, service: str) -> dict:
with httpx.Client(base_url=base_url, timeout=10.0) as client:
r = client.get(f"/status/{service}")
r.raise_for_status()
return r.json()
def main() -> None:
config = Config()
for svc in ("billing", "auth", "notifications"):
data = fetch_status(config.api_url, svc)
log.info("service ok", extra={"service": svc, "status": data.get("status")})
out = Path("report.json")
out.write_text(str(fetch_status.cache_info()), encoding="utf-8")
if __name__ == "__main__":
main()Lo que esto demuestra:
- Pydantic para configuración, httpx para HTTP, lru_cache para deduplicación
- pathlib para I/O de archivos, logging con extras
- Patrones de la tabla de referencia combinados
Errores Comunes (Gotchas)
- Uso de modismos obsoletos -
os.pathen lugar de pathlib, formato%en lugar de f-strings. Solución: preferir las soluciones de la columna derecha. - Copiar y pegar sin contexto - Desajuste entre síncrono y asíncrono. Solución: adaptar la solución a tu contexto síncrono/asíncrono.
- Sin manejo de errores - los ejemplos son mínimos. Solución: añadir try/except y timeouts en producción.
lru_cacheen argumentos no hasheables - TypeError. Solución: solo argumentos hasheables o clave de caché personalizada.- Biblioteca
requestspara código nuevo -httpxes preferible por paridad síncrona y asíncrona. Solución: estandarizar enhttpx.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| Búsqueda en Stack Overflow | Problema novedoso | Tarea común listada aquí |
| Documentación de la librería estándar | Comportamiento de casos límite | Búsqueda rápida de modismos |
| Generación de código con IA | Estructura de código repetitivo (boilerplate) | Patrones críticos para la seguridad |
Preguntas Frecuentes (FAQs)
¿pathlib o os.path?
pathlib para todo el código nuevo. os.path solo para compatibilidad con código heredado.
¿requests o httpx?
httpx para nuevos proyectos. Soporta síncrono y asíncrono con la misma API.
¿dataclass o Pydantic?
dataclass para datos internos. Pydantic para límites de validación.
¿Cómo contribuyo con nuevas entradas?
Propón adiciones en la guía de estilo del equipo cuando un patrón se repita en la revisión.
¿Son específicos de Python 3.14?
La mayoría funciona en 3.13+. Los patrones de coincidencia usan la sintaxis de fusión de diccionarios de 3.9+.
¿Columna síncrona vs asíncrona?
Usa la columna asíncrona en aplicaciones FastAPI/asyncio. Síncrona para scripts y CLIs bloqueantes.
¿pandas o Polars para CSV?
Polars para rendimiento. pandas para compatibilidad con el ecosistema.
¿Cómo manejo los reintentos?
Biblioteca tenacity con backoff exponencial y jitter.
¿Cómo probar estos patrones?
Cada patrón es testeable unitariamente. Ver artículos enlazados sobre pytest.
¿Dónde está la librería estándar completa?
docs.python.org/3/library/ - esta página es el atajo curado.
Relacionado
- 50 Reglas de Python - principios detrás de las soluciones
- Referencia de Estilo y PEP 8 - convenciones de estilo
- Fundamentos de Python - conceptos básicos del lenguaje
- Visión General de la Librería Estándar - mapa de la librería estándar
Versiones de Stack: Esta página fue escrita para Python 3.14.0, FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, y uv 0.6+.