Introducción
************

La "biblioteca Python" contiene varios tipos de componentes
diferentes.

Contiene tipos de datos que normalmente se considerarían parte del
"núcleo" de un lenguaje, como números y listas.  Para estos tipos, el
núcleo del lenguaje Python define la forma de los literales y coloca
algunas restricciones a su semántica, pero no define completamente la
semántica.  (Por otro lado, el núcleo del lenguaje sí define
propiedades sintácticas como la ortografía y las prioridades de los
operadores.)

La biblioteca también contiene funciones y excepciones incorporadas
--- objetos que pueden ser utilizados por todo código Python sin la
necesidad de una declaración "import". Algunas de ellos están
definidas por el núcleo del lenguaje, pero muchos no son esenciales
para la semántica del núcleo y sólo se describen aquí.

La mayor parte de la biblioteca, sin embargo, consiste en una
colección de módulos. Hay muchas maneras de diseccionar esta
colección.  Algunos módulos están escritos en C y fueron incorporados
en el intérprete de Python; otros están escritos en Python y se
importan en código fuente.  Algunos módulos proporcionan interfaces
muy específicas de Python, como la impresión de un *stack trace*;
otros proporcionan interfaces que son específicas para determinados
sistemas operativos, como el acceso a hardware específico; otros
proveen interfaces específicas para un dominio de aplicación concreto,
como la World Wide Web. Algunos módulos están disponibles en todas las
versiones y plataformas de Python; otros sólo están disponibles cuando
el sistema subyacente los soporta o los requiere; otros solo están
disponibles cuando se ha elegido una opción de configuración
particular en el momento en que compiló e instaló Python.

Este manual está organizado "desde adentro hacia afuera:" primero
describe las funciones integradas, los tipos de datos y las
excepciones, y finalmente describe los módulos, agrupados en capítulos
de módulos relacionados.

Esto significa que si comienza a leer este manual desde el principio,
y salta al siguiente capítulo cuando se aburra, obtendrá una visión
general razonable de los módulos y áreas de aplicación disponibles que
son soportados por la biblioteca de Python.  Por supuesto, no *tienes*
que leerlo necesariamente como una novela --- sino que también puedes
navegar por la tabla de contenidos (al principio del manual), o buscar
una función, módulo o término específico en el glosario (en la parte
final del manual).  Y por último, si disfruta aprender sobre
diferentes temas de manera aleatoria, puede escoger un número de
página al azar (ver módulo "random") y leer una o dos secciones.
Independientemente del orden en que lea las secciones de este manual,
es útil comenzar con el capítulo Funciones incorporadas, ya que el
resto del manual asume la familiaridad con este material.

¡Que comience el espectáculo!


Notas sobre la disponibilidad
=============================

* Una nota de "Disponibilidad: Unix" significa que esta función se
  encuentra comúnmente en los sistemas Unix.  Pero no hace ninguna
  afirmación sobre su existencia en un sistema operativo específico.

* Si no se indica por separado, todas las funciones que afirman
  "Disponibilidad: Unix" son compatibles con macOS, que se basa en un
  núcleo de Unix.

* Si una nota de disponibilidad contiene tanto una versión mínima del
  Kernel como una versión mínima de libc, entonces ambas condiciones
  deben cumplirse. Por ejemplo, una característica con la nota
  *Availability: Linux >= 3.17 with glibc >= 2.27* requiere tanto
  Linux 3.17 o posterior como glibc 2.27 o posterior.


Plataformas WebAssembly
-----------------------

Las plataformas WebAssembly "wasm32-emscripten" (Emscripten) y
"wasm32-wasi" (WASI) proporcionan un subconjunto de APIs POSIX. Los
tiempos de ejecución de WebAssembly y los navegadores están aislados y
tienen acceso limitado al host y a los recursos externos. Cualquier
módulo de la biblioteca estándar de Python que utilice procesos,
hilos, redes, señales u otras formas de comunicación entre procesos
(IPC), no está disponible o puede no funcionar como en otros sistemas
tipo Unix. La E/S de archivos, el sistema de archivos y las funciones
relacionadas con permisos Unix también están restringidas. Emscripten
no permite el bloqueo de E/S. Otras operaciones bloqueantes como
"sleep()" bloquean el bucle de eventos del navegador.

Las propiedades y el comportamiento de Python en plataformas
WebAssembly dependen de la versión del SDK Emscripten o del SDK WASI,
de los tiempos de ejecución WASM (navegador, NodeJS, wasmtime) y de
los indicadores de tiempo de compilación de Python. WebAssembly,
Emscripten, y WASI son estándares en evolución; algunas
características como las redes pueden ser soportadas en el futuro.

Para Python en el navegador, los usuarios deberían considerar Pyodide
o PyScript. PyScript está construido sobre Pyodide, que a su vez está
construido sobre CPython y Emscripten. Pyodide proporciona acceso a
las APIs JavaScript y DOM de los navegadores, así como capacidades de
red limitadas con las APIs "XMLHttpRequest" y "Fetch" de JavaScript.

* Las APIs relacionadas con procesos no están disponibles o siempre
  fallan con un error. Esto incluye APIs que generan nuevos procesos
  ("fork()", "execve()"), esperan procesos ("waitpid()"), envían
  señales ("kill()"), o interactúan con procesos. El "subprocess" se
  puede importar pero no funciona.

* El módulo "socket" está disponible, pero es limitado y se comporta
  de forma diferente a otras plataformas. En Emscripten, los sockets
  son siempre no bloqueantes y requieren código JavaScript adicional y
  auxiliares en el servidor para proxy TCP a través de WebSockets; ver
  Emscripten Networking para más información. Vista previa de
  instantánea WASI  1 permite sólo sockets desde un descriptor de
  fichero existente.

* Algunas funciones son stubs que no hacen nada y siempre devuelven
  valores codificados.

* Las funciones relacionadas con descriptores de archivos, permisos de
  archivos, propiedad de archivos y enlaces son limitadas y no admiten
  algunas operaciones. Por ejemplo, WASI no permite enlaces simbólicos
  con nombres de archivo absolutos.
