Novedades en Python 3.9



@eduardo_gpg

Número de visitas 1703

Tiempo de lectura 3 min

6 Octubre 2020

Este pasado Lunes 5 de Octubre del 2020, la última versión de Python, la versión 3.9 ha sido liberada. Y con esta nueva versión, nuevos features se incorporan al lenguaje. Si eres amante de Python sin duda esta noticia te causará emoción. 🥳

Así que, en lo que descargas e instalas la última versión, aquí te listo un par features que encontraremos en este nuevo release.

¿Acaso estamos a meses de la versión 4? Qué emoción.😲

Bien, no perdamos más el tiempo y comencemos.

Nuevos operadores

Uno de los cambios más importantes que encontramos en esta nueva versión es sin duda la integración de 2 nuevos operadores | y |=, esto para los diccionarios.

Utilizando el operador pipe | seremos capaces de unir diccionarios. Sí, así como leer, unir diccionarios.

Veamos un par de ejemplos.

>>> a = {'title': 'PyWombat', source='article'}
>>> b = {'version':3.9}

>>> a | b
{'title': 'PyWombat', 'source': 'article', 'version': 3.9}

Al utilizar el operador | obtendremos como resultado un nuevo diccionario, el cual fácilmente podremos almacenar en una nueva variable. 😄

Si deseamos actualizar un diccionario utilizamos |=

>>> a = {'title': 'PyWombat', 'source': 'article'}
>>> b = {'version': 3.9, 'title': 'Nuevo artículo sobre Python'}

a |= b
>>> a
{'title': 'Nuevo artículo sobre Python', 'source': 'article', 'version': 3.9}

Para este segundo ejemplo actualizamos el diccionario a con lo que el diccionario b posea. En caso existan llaves duplicadas (Cómo lo es en mi ejemplo, con la llave title duplicada) el último valor será el que prevalezca, es decir, lo que el diccionario después del signo igual posea.

Con esta nueva actualización tanto las listas como los diccionarios podrás ser actualizados x)

Visita PEP 584 para más información.

Generic types

Las anotación no son algo nuevo del lenguaje, de hecho se introdujeron en la versión 3.5, sin embargo para este nuevo release podrás utilizar los genéricos list o dict como anotaciones al momento de definir nuevas funciones.

>>> def promedio_calificaciones(calificaciones: list[int]) -> int:
...     return sum(calificaciones) // len(calificaciones)
>>> promedio_calificaciones([10, 10, 8, 9, 10])
9

Al utilizar anotaciones nuestro código se vuelve mucho más fácil de comprender, y por supuesto, mucho más fácil de mantener. Siempre que puedas te recomiendo los utilices.🤠

Si quieres conocer más acerca de las anotaciones, sólo háznoslo saber. 🙉

Soporte para IANA timezone

Un nuevo soporte para fechas se ha incorporado el lenguaje, y sin duda muchos desarrolladores lo agradecemos. 🙌

Ahora podremos crear nuevas propias fechas utilizando el módulo zoneinfo, con el cual podremos definir la zona horaria a utilizar. Basta con colocar la siguiente estructura: continente/ciudad.

Veamos un par de ejemplos.

>>> from zoneinfo import ZoneInfo
>>> from datetime import datetime

# Creamos una fecha para la ciudad de México.
>>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Mexico_City"))
>>> dt
datetime.datetime(2020, 10, 31, 12, 0, tzinfo=zoneinfo.ZoneInfo(key='America/Mexico_City'))

>>> dt.tzname()
'CST'

Y lo más cool, podemos convertir fechas de una zona horaria a otra 😱

Por ejemplo, obtenegamos la fecha en Berlín con respecto a la fecha actual de la ciudad de México.

>>> from zoneinfo import ZoneInfo
>>> from datetime import datetime

>>> berlin = ZoneInfo('Europe/Berlin')

>>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Mexico_City"))
>>> dt
datetime.datetime(2020, 10, 31, 12, 0, tzinfo=zoneinfo.ZoneInfo(key='America/Mexico_City'))

# Modificamos la zona horaria
>>> dt.astimezone(berlin)
datetime.datetime(2020, 10, 31, 19, 0, tzinfo=zoneinfo.ZoneInfo(key='Europe/Berlin'))

Eliminar prefijos y sufijos

2 nuevos métodos de añaden a los objetos de tipo String.

  • removeprefix
  • removesuffix

Los cuales, como su nombre nos indican, nos permitirán eliminar prefijos y sufijos de nuestros strings.

>>> mensaje = 'Hola Mundo!'

>>> mensaje.removeprefix('Hola')
' Mundo!'

>>> mensaje.removesuffix('Mundo!')
'Hola '

Los métodos reciben como argumentos el prefijo y sufijo a eliminar. Super fácil :D

Dejamos de aún lado nuestro método rudimentario. 😬

>>> sufijo = 'Mundo!'
>>> mensaje[0: len(mensaje) - len(sufijo)]

Fix sobre el método replace

En versiones anteriores de Python, el método replace tenía un comportamiento algo extraño, esto al momento de trabajar con strings vacíos.

Por ejemplo. Si intentábamos reemplazar un string vacío por algún otro valor, esto por lo menos una sola vez, el resultado siempre era él mismo, él string vacío. Algo que sin duda podría confundir a más de uno.

>>> ''.replace('', 'Algo', 1)
'' 

Sin embargo para en esta nueva versión el bug fue solucionado. 🥳

>>> ''.replace('', 'Algo', 1)
'Algo'

Existen muchos más nuevos features en el lenguaje, sin embargo estos son los que considero los más relevantes, o por lo menos con los que tarde o tempranos estaremos utilizando.

Si quieres leer más acerca de estas nuevas mejoras, te invito a que le eches un vistazo a la guía oficial.

¿ y qué opinas de esta nueva actualización? ¿Pretendes actualizar o esperarás un par de días más? Cuéntanos en la sección de comentarios.


¿El contenido te resulto de ayuda?

Para poder dejar tu opinión es necesario ser un usuario autenticado. Login

Más Tips y Ejercicios 🐍

Adquiere una subscripción PyWombat por tan solo $3 USD. al mes.

Conoce los beneficios de ser usuario premium:
Niveles desbloqueados: Ten accesos a todos los niveles de ejercicios. 🔓
Nuevo límite: Incrementa tu límite de ejercicios por semana. 🚀
Contenido único: Recibe semanalmente recursos exclusivos de Python (Videos, Artículos y Capitulos del libro PyWombat, comienza como desarrollador Python. 🐍