Python es uno de los lenguajes que se mantiene en los primeros lugares cuando consultamos el índice TIOBE, las encuestas de Stack Overflow, JetBrains, GitHub y otros sitios de referencia. Las razones son la facilidad de aprendizaje, capacidades para desarrollo en la web, implementaciones para ciencia de datos e inteligencia artificial y otras más.
Por ello es natural que al haber una actualización mayor todo el mundo mire para saber que nos ofrecerá de nuevo este lenguaje con sus ya bastante amplias capacidades y estas son algunas de las novedades más relevantes.
Soporte para zonas horarias (Time Zone)
El módulo datetime
ya nos permitía trabajar con fechas y horas en el formato UTC y debíamos recurrir a librerías de terceros si queríamos hacer algún manejo con las mismas. Ahora se incluye el nuevo módulo zoneinfo
para implementar zonas horarias de la base de datos IANA.
Podemos obtener un objeto describiendo la zona horaria de la siguiente forma:
>>> from zoneinfo import ZoneInfo
>>> ZoneInfo("Mexico/BajaSur")
zoneinfo.ZoneInfo(key='Mexico/BajaSur')
Si queremos conocer cuales son las zonas horarias disponibles de la base de datos de IANA, ejecutar el comando zoneinfo.available_timezones()
Nuevos operadores para diccionarios
Los diccionarios son una de las estructuras de datos más populares en Python y que debes manejar correctamente ya que te acompañarán en muchos de tus proyectos.
Estos son los operadores merge (|
) y update (|=
) que complementan los métodos ya existentes como dict.update
y {**d1, **d2}
.
Veamos un ejemplo al combinar diccionarios:
>>> javascript = {"angular": "Nicolas Molina", "react": "Richard Kaufman"}
>>> marketing = {"copywriting": "Diana Reyes", "Growth": "Sofia Maradiaga"}
>>> javascript | marketing
{'angular': 'Nicolas Molina', 'react': 'Richard Kaufman', 'copywriting': 'Diana Reyes', 'Growth': 'Sofia Maradiaga'}
>>> marketing | javascript
{'copywriting': 'Diana Reyes', 'Growth': 'Sofia Maradiaga', 'angular': 'Nicolas Molina', 'react': 'Richard Kaufman'}
Ahora el resultado de actualizar un diccionario con la información de otro:
>>> javascript = {"angular": "Nicolas Molina", "react": "Richard Kaufman"}
>>> marketing = {"copywriting": "Diana Reyes", "Growth": "Sofia Maradiaga"}
>>> profesores = {}
>>> profesores |= marketing
>>> profesores
{'copywriting': 'Diana Reyes', 'Growth': 'Sofia Maradiaga'}
>>> profesores |= javascript
>>> profesores
{'copywriting': 'Diana Reyes', 'Growth': 'Sofia Maradiaga', 'angular': 'Nicolas Molina', 'react': 'Richard Kaufman'}
Seguro te serán muy útiles estos operadores y podrás ahorrar tiempo.
Nuevos métodos de strings para remover prefijos y sufijos
Seguro ya conoces el método .strip()
que te ayuda a quitar caracteres de tu string, pero en ocasiones puede funcionar de una forma inesperada cuando le damos un parámetro específico.
Estos métodos son string.removeprefix(prefix)
y string.removesuffix(suffix)
, pero nada mejor que verlos en acción para entender cómo funcionan:
Remove prefix
>>> profesora_copy = "Profesora del Curso de Copywriting para Plataformas Digitales"
>>> profesora_copy.removeprefix("Profesora del Curso de ")
'Copywriting para Plataformas Digitales'
Remove suffix
>>> profesora_copy = "Profesora del Curso de Copywriting para Plataformas Digitales"
>>> profesora_copy.removesuffix(" para Plataformas Digitales")
'Profesora del Curso de Copywriting'
Type hinting o notaciones de tipo de dato
La notación en funciones es algo que nos acompaña desde 2008 en Python 3.0, característica que ha evolucionado y ahora se presenta en una forma más refinada. Ahora es posible especificar los tipo de datos de los parámetros que pasamos por una función como se hace en otros lenguajes y que resulta bastante útil para bases complejas como diccionarios con un gran volumen de datos evitando indicar el tipo de dato de cada llave-valor.
Veamos un ejemplo sin type hinting:
>>> def suma_enteros(numero):
... return numero + numero
...
>>> suma_enteros('ola ke ase')
'ola ke aseola ke ase'
Ahora con type hinting:
>>> def suma_enteros(numero: int):
... return numero + numero
...
>>> suma_enteros('ola ke ase')
'ola ke aseola ke ase'
Como puedes observar esta notación no arroja un error ya que es posible “sumar” cadenas de caracteres en Python, por lo que debes tener esta consideración. Eso sí, nuestro editor nos indicará que el parámetro ingresado se espera sea de tipo int
y podemos combinarlo con la sintaxis -> type
para indicarlo también en la salida:
>>> def suma_enteros(numero: int) -> int:
... return numero + numero
...
>>> suma_enteros(5)
10
Un nuevo parser
Python 3.9 ahora utilizará un nuevo parser que será ligeramente más ágil aunque esto implique un aumento mínimo en el uso de memoria, suficiente para no ser notado en nuestro día a día. El anterior parser aún podrá ser utilizado y dejará de estar disponible cuando Python 3.10 sea lanzado.
¿Esto afectará mi aprendizaje o código actual?
Por supuesto existen muchos más detalles que puedes conocer en la documentación oficial, especialmente aquellas partes del lenguaje que ya han pasado al status deprecated o que se removieron.
En términos generales puedes seguir escribiendo código y aprendiendo de una versión como 3.6, aún así vale la pena que actualices a la más reciente para comenzar a aprovechar estas bondades.
Si aún no conoces de Python o quieres iniciar este lenguaje, te comparto esta ruta de aprendizaje para comenzar ¡Anímate!
Curso Básico de Python