Pregunta 1¿Cuál de las siguientes describe correctamente la diferencia entre una biblioteca estándar y una biblioteca de terceros?
Categorías de la biblioteca estándar — Cuándo usar qué
Echa un vistazo panorámico a la biblioteca estándar de Python repartida en 7 categorías. Manejo de fechas, trabajo numérico, E/S de datos, concurrencia — averigua qué importar para cada situación.
La biblioteca estándar de Python es el conjunto de cientos de módulos que puedes usar con solo import — sin necesidad de pip install. Este artículo organiza el conjunto entero en 7 categorías para que veas el panorama de un vistazo.
Qué es la biblioteca estándar — Módulos que vienen con Python
La biblioteca estándar es la colección de módulos que funcionan en cuanto instalas Python. Cosas como math, os y json están disponibles con un simple import — nunca tienes que ejecutar pip install para ellas.
pip install aparte.| Tipo | Instalación | Ejemplos |
|---|---|---|
| Biblioteca estándar | Incluida con Python (sin instalación) | math / os / sys / json / datetime / re / asyncio |
| Biblioteca de terceros | Se añade con pip install | pandas / numpy / requests / fastapi |
Hay situaciones en las que la biblioteca estándar no basta, pero probar primero la estándar suele compensar a largo plazo. Aquí está el porqué.
- No requiere instalación extra, así que se ejecuta en cualquier sitio — servidores internos, CI, contenedores Docker e incluso el runtime del navegador que usa esta serie
- La gestión de versiones es fácil — una vez fijada la versión de Python, la versión de la biblioteca estándar también queda fijada automáticamente
- Probada en batalla y estable — la biblioteca estándar evoluciona manteniendo una compatibilidad hacia atrás estricta, así que el código que escribiste hace años todavía funciona
Las 7 categorías por caso de uso
La biblioteca estándar tiene cientos de módulos, pero agruparlos en 7 categorías por propósito hace mucho más fácil saber dónde mirar. Esta serie sigue el mismo orden, recorriendo cada categoría una a una de arriba abajo.
| Categoría | Módulos representativos | Qué puedes hacer |
|---|---|---|
| A Runtime y archivos | sys / os / pathlib / shutil | Inspeccionar el runtime, trabajar con archivos y carpetas |
| B Números, fechas, aleatorio | math / statistics / decimal / datetime / random | Trabajo numérico, cálculo monetario con bajo error, aritmética de fechas, generación de aleatorios |
| C Cadenas y texto | re / string / textwrap / pprint | Extraer con regex, sustitución por plantilla, ajuste de líneas, impresión bonita |
| D E/S de datos | json / csv / pickle / base64 / hashlib | Convertir objetos a y desde texto o flujos de bytes |
| E Estructuras de datos extendidas | collections / itertools / functools / dataclasses | Más allá de list y dict — estructuras de datos más ricas |
| F Gestión de recursos | contextlib / logging | Construir tus propios bloques with y emitir registros para código operable |
| G Concurrencia y paralelismo | asyncio / threading / multiprocessing | Ejecutar trabajo en paralelo |
Cada categoría lista varios módulos porque el objetivo es el mismo pero el ángulo es distinto. Por ejemplo, en la categoría B, tanto random como secrets generan números aleatorios, pero random es para juegos y datos de prueba, mientras que secrets devuelve aleatorios fuertes adecuados para casos de seguridad como tokens de restablecimiento de contraseña. Esta serie recorre cada categoría y ordena estos módulos parecidos pero distintos para que sepas a cuál recurrir.
Cómo escribir import — Convenciones que evitan choques de nombres
Hay varias formas de escribir import cuando llamas a la biblioteca estándar (cubierto en detalle en el artículo anterior). Cada una tiene sus ventajas y trampas, así que eliges según la situación. Aquí están los cuatro patrones comunes.
| Forma | Ejemplo de llamada | Cuándo encaja |
|---|---|---|
| import math | math.sqrt(2) | Lo predeterminado. Cualquiera que lea el código sabe de dónde viene la función |
| import json as J | J.dumps(data) | Cuando quieres un alias corto dentro de un solo archivo (lo mismo vale para los convencionales como np / pd) |
| from datetime import datetime | datetime(2024, 1, 1) | Cuando solo usas 1 o 2 nombres del módulo |
| from os import * | getcwd() | Evítalo en general. Es un caldo de cultivo para choques de nombres |
La forma import math muestra de dónde vino cada nombre en el sitio de la llamada, así que no te pierdes al releer el código más tarde. Por otro lado, la forma from paquete import función descarta el prefijo del nombre del módulo (la parte que va delante del nombre de la función, como el math. en math.sqrt), lo que te deja escribir las cosas de forma compacta como datetime(2024, 1, 1).
Evita from x import * por norma
Escribir from os import * para traer todos los nombres puede sobrescribir silenciosamente funciones del mismo nombre definidas en otra parte. Por ejemplo, os.open() y la open() integrada son cosas diferentes, pero escribir from os import * reemplaza la open integrada por os.open y rompe la lectura y escritura de archivos. Evítalo tanto en tus propios módulos como en los de la biblioteca estándar — esa es la jugada segura.
Bibliotecas estándar que no se ejecutan en el navegador — Cómo las trata esta serie
Los ejercicios de esta serie corren sobre un runtime de Python basado en navegador (MicroPython o Pyodide). La mayor parte de la biblioteca estándar funciona bien, pero cualquier cosa que necesite hilos o procesos del SO simplemente no se puede hacer funcionar — el sandbox del navegador no lo permite. sys.argv (el mecanismo para recibir argumentos de línea de comandos) también funciona en una máquina real pero no en el navegador, ya que no hay forma de pasar argumentos. Para estos, cubrimos los conceptos con diagramas para que los recuerdes rápido cuando escribas el código en una máquina real.
multiprocessing y subprocess que lanzan algo en el exterior no funcionan. Esta serie las cubre solo con diagramas.| Tratamiento | Módulos cubiertos | Razón |
|---|---|---|
| Práctica | math / re / datetime / json / collections / asyncio y muchos más | Se ejecutan tal cual en Pyodide / MicroPython |
| Centrado en diagramas + quiz | threading / concurrent.futures | Los hilos reales no se ejecutan en el navegador, pero los conceptos importan en el trabajo del mundo real |
| Solo diagrama | multiprocessing / subprocess | Sin procesos del SO no se pueden hacer ejercicios prácticos |
Por qué cubrimos igualmente los temas solo de diagrama
En el trabajo real, sin duda ejecutarás código sobre un SO de verdad en algún momento. Cuando eso pase, conocer los conceptos detrás de threading vs. multiprocessing o ejecutar un comando con subprocess marca una gran diferencia en lo fácil que es dar ese primer paso. Esta serie no se salta los temas solo porque no se ejecuten en el navegador — en cambio, diagramamos las partes que no se pueden ejecutar para que las recuerdes cuando de verdad necesites escribir el código.
Verificación de conocimientos
Responde cada pregunta una a una.
Pregunta 2¿Cuál de las siguientes formas de import deberías evitar en general?