typestar

Python pythónico

53 pasos en 14 series de Python.

La diferencia entre Python que funciona y Python que se lee como Python. Primero las comprensiones, luego los decoradores y las clausuras que llevan debajo, los generadores y los itertools que los acompañan, y los protocolos dunder que hacen que tus propios objetos se comporten como los integrados.

Después la cosa se pone menos amable. Descriptores, __init_subclass__ y la maquinaria cercana a las metaclases, functools y operator, tipado más allá de lo básico, y async dos veces: una por la sintaxis y otra por los patrones que aparecen de verdad. No todo esto es código que deberías escribir. Todo esto es código que vas a leer.

Empieza este tour

Comprensiones

Decoradores y clausuras

Generadores e itertools

Protocolos y gestores de contexto

Tipado y dataclasses

Async

Hilos y procesos

  • Pools de hilosCorrer trabajo limitado por IO a través de un pool de hilos.
  • LocksProteger el estado compartido para que los hilos no lo corrompan.
  • Pools de procesosRepartir trabajo limitado por CPU entre núcleos de verdad.
  • Futures según terminanReaccionar a los resultados en orden de término, no de envío.

Atributos y descriptores

  • __slots__Declarar los atributos por adelantado elimina el dict por instancia.
  • Propiedades con validaciónUna propiedad vuelve el acceso al atributo una llamada a método, así las invariantes se cumplen.
  • DescriptoresEl protocolo debajo de las propiedades: __get__ y __set__ en un atributo de clase.

Maquinaria de clases

  • Clases base abstractasLas ABC declaran la interfaz y se niegan a instanciarse hasta que se cumple.
  • __init_subclass__Un hook que corre al definirse una subclase — un registro sin metaclase.
  • Una metaclaseLa clase de una clase: corre al definirla y puede reescribirla.

functools y operator

  • functoolspartial, reduce y cached_property: tres herramientas que vale la pena tener a mano.
  • singledispatchUn solo nombre de función, y la implementación elegida por el tipo del primer argumento.
  • El módulo operatorFunciones con nombre para los operadores, que le ganan a una lambda como clave de orden.

Tipado a fondo

  • TypeVar y GenericUn parámetro de tipo deja que una clase o función conserve el tipo de quien llama.
  • ProtocolosTipado estructural: cualquier cosa con los métodos correctos satisface el protocolo.
  • TypedDict y NewTypeTipar la forma de un dict, y darle a un primitivo un nombre distinto.
  • overloadVarias firmas para una función, para que el verificador sepa qué regresa.

Datos y enums

Async a fondo

Bis

  • async_crawler.pyConsultar muchas URLs concurrentemente y reportar tamaños y tiempos.
  • parallel_hash.pyHashear cada archivo bajo un directorio con un pool de procesos.

Los otros tours de Python