Python 3.9: novedades y mejoras

Python 3.9, lanzado hoy, presenta cambios significativos tanto en las características del lenguaje como en la forma en que se desarrolla. Python ha crecido en popularidad en los últimos años y su uso se ha disparado en áreas en rápida evolución como la ciencia de datos y el aprendizaje automático. El proyecto está trabajando duro para seguir el ritmo de todas las nuevas demandas. 

Aquí hay un resumen de todas las grandes características nuevas de Python 3.9.

Python cambia a un ciclo de lanzamiento anual

Hasta este momento, Python se ha desarrollado y lanzado con una cadencia de dieciocho meses. PEP 602 propuso que el equipo de desarrollo de Python adopte un ciclo de lanzamiento anual, y esa propuesta ha sido aceptada. 

Un ciclo de lanzamiento anual significa menos funciones por lanzamiento, pero también significa comentarios más rápidos sobre las pruebas de características, menos cambios potencialmente importantes para cada lanzamiento y, por lo tanto, más incentivos para que los usuarios y los administradores de distribución de Linux actualicen Python con más frecuencia. También significa que las nuevas funciones propuestas al final del ciclo de desarrollo no tardarán tanto en incorporarse a una nueva versión.

La nueva línea de tiempo significa que Python 3.9 se enviará en octubre de 2020. Python 3.10 comenzó oficialmente el desarrollo pre-alfa el 19 de mayo de 2020, entrará en la fase de desarrollo alfa cuando se envíe Python 3.9 y se enviará en octubre de 2021. Las futuras versiones de Python seguirán el mismo patrón.

Python se vuelve más rápido por defecto

Cada revisión de Python disfruta de mejoras de rendimiento con respecto a la versión anterior. Python 3.9 incluye dos grandes mejoras que aumentan el rendimiento sin requerir ningún cambio en el código existente.

La primera mejora implica un mayor uso del vectorcallprotocolo introducido en Python 3.8. vectorcallacelera muchas llamadas a funciones comunes minimizando o eliminando los objetos temporales creados para la llamada. En Python 3.9, varios componentes integrados de Python se range, tuple, set, frozenset, list, dictutilizan vectorcallinternamente para acelerar la ejecución.

El segundo gran potenciador del rendimiento es un análisis más eficiente del código fuente de Python. El nuevo analizador para el tiempo de ejecución de CPython no se diseñó para abordar problemas de rendimiento, sino para tratar las inconsistencias internas en el analizador original. Sin embargo, un beneficio adicional importante es un análisis más rápido, especialmente para grandes volúmenes de código.

Más funciones de diccionario y cadenas de Python

Python facilita la manipulación de tipos de datos comunes y Python 3.9 amplía esta facilidad con nuevas funciones para cadenas y diccionarios. Para las cadenas, existen nuevos métodos para eliminar prefijos y sufijos, operaciones que durante mucho tiempo han requerido mucho trabajo manual para llevarlas a cabo. Para los diccionarios, ahora hay operadores de unión, uno para fusionar dos diccionarios en un nuevo diccionario y otro para actualizar el contenido de un diccionario con otro diccionario.

Los decoradores pierden algunas restricciones

Los decoradores le permiten ajustar las funciones de Python para modificar sus comportamientos mediante programación. Anteriormente, los decoradores solo podían consistir en el símbolo @, un nombre (p func. Ej. ) O un nombre con puntos ( func.method) y, opcionalmente, una sola llamada ( func.method(arg1, arg2)). Con Python 3.9, los decoradores ahora pueden constar de cualquier expresión válida.

Una forma antigua de evitar esta restricción era crear una función o expresión lambda que sustituyera a una expresión más compleja cuando se usaba como decorador. Ahora cualquier expresión servirá, siempre que produzca algo que pueda funcionar como decorador.

Nuevas operaciones de tipo Python

Durante las últimas versiones, Python ha ampliado el soporte para sugerencias de tipo. Esto es principalmente por el bien de linters y verificadores de código; los tipos no se aplican en tiempo de ejecución en CPython, y no hay planes para hacer de Python un lenguaje escrito estáticamente. Pero la sugerencia de tipo es una herramienta poderosa para garantizar la coherencia en grandes bases de código, por lo que el código Python aún puede beneficiarse de tener sugerencias de tipo. 

Dos nuevas características para sugerencias de tipo y anotaciones de tipo se abrieron paso en Python 3.9. En uno, las sugerencias de tipo para el contenido de las colecciones, por ejemplo, listas y diccionarios, ahora están disponibles en Python de forma nativa. Esto significa que, por ejemplo, puede describir una lista como list[int] una lista de números enteros sin necesidad de que la typingbiblioteca lo haga.

La segunda adición a los mecanismos de escritura de Python es la función flexible y las anotaciones variables. Esto permite el uso del Annotatedtipo para describir un tipo usando metadatos que se pueden examinar con anticipación (con herramientas de linting) o en tiempo de ejecución. Por ejemplo, Annotated[int, ctype("char")]podría usarse para describir un número entero que debería considerarse como un chartipo en C. Por defecto, Python no haría nada con tal anotación, pero podría ser usado por linters de código. 

Mejoras en los componentes internos de Python

Limpiar, refinar y modernizar los componentes internos de Python es una iniciativa en curso para los desarrolladores de Python, y Python 3.9 tiene un par de cambios en ese sentido.

El primero es un rediseño de la forma en que los módulos interactúan con la maquinaria de importación. Los módulos de extensión de Python, escritos en C, ahora pueden usar un nuevo mecanismo de carga que los hace comportarse más como módulos normales de Python cuando se importan. Varios módulos de la biblioteca estándar de Python recién apoyan este comportamiento: _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time, _weakref. El nuevo mecanismo de carga no solo permite que los módulos de extensión sean manejados de manera más flexible por Python, sino que también habilita nuevas capacidades como comportamientos de enganche avanzados.

La segunda iniciativa de limpieza es una ABI interna estable para CPython, una garantizada para durar toda la vida de Python 3. Históricamente, cada revisión importante de Python ha sido incompatible con ABI con versiones anteriores, lo que requiere que se recompilen módulos de extensión para cada nueva versión. De ahora en adelante, cualquier módulo de extensión que use la ABI estable funcionará en las versiones de Python. Con Python 3.9, los siguientes módulos de la biblioteca estándar utilizan el estable ABI: audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios, zlib.

Otros cambios en Python 3.9

  • La biblioteca estándar de Python ahora es compatible con la base de datos de zona horaria de IANA. Dicha base de datos está bien mantenida y se usa ampliamente, y tener una forma directa de usarla en la biblioteca de fecha y hora de Python será un gran ahorro de tiempo.
  • Los nuevos métodos de cadena permiten eliminar fácilmente prefijos y sufijos. Este es uno de esos escenarios de uso cotidianos comunes que requirieron un poco más de repetición de lo que parecía necesario. Los métodos nuevos .removeprefix()y .removesuffix()devuelven una copia modificada de una cadena menos el prefijo o sufijo en cuestión, siempre que existan en la cadena.

Cómo hacer más con Python

  • 4 comprobadores de tipo Python para mantener limpio su código
  • Estilo Python: 5 herramientas para limpiar su código Python
  • Cómo trabajar con el tipo de datos de lista de Python
  • Cómo empaquetar aplicaciones Python con BeeWare Briefcase
  • Cómo ejecutar Anaconda al lado de otras Pythons
  • Cómo usar las clases de datos de Python
  • Comience con async en Python
  • Cómo usar asyncio en Python
  • 3 pasos para una revisión de Python async
  • Cómo usar PyInstaller para crear ejecutables de Python
  • Tutorial de Cython: Cómo acelerar Python
  • Cómo instalar Python de forma inteligente
  • Cómo administrar proyectos de Python con Poetry
  • Cómo administrar proyectos de Python con Pipenv
  • Virtualenv y venv: explicación de los entornos virtuales de Python
  • Python virtualenv y venv qué hacer y qué no hacer
  • Explicación de subprocesos y subprocesos de Python
  • Cómo usar el depurador de Python
  • Cómo usar timeit para perfilar el código Python
  • Cómo usar cProfile para perfilar el código Python
  • Cómo convertir Python a JavaScript (y viceversa)