6 Cositas sabrosas que hacer con Python

Como ya sabes por mis posts anteriores, llevo ya un par de meses embarcado en un Bootcamp de Machine Learning y Data Science con las buenas gentes de Core School.

Como es natural, el lenguaje principal es Python. Precisamente por eso, vengo con un magnífico post de 6 cosas magníficas que debes saber de Python!

1. Intercambia valores de variables en una sola sentencia

Esto viene directamente de la posibilidad de hacer una asignación múltiple a partir de una tupla. Mira, por ejemplo, este código

Como ves, puedes asignar las 2 variables a la vez teniendo una tupla. Si la tupla que usas para asignar las variables contiene, a su vez, otra dos variables, debe ser igual de válido.

Siguiendo la misma lógica, puedes usar las dos variables que quieres intercambiar dentro de la tupla, en orden inverso.

Y, por último, como en Python puedes omitir los paréntesis al crear una tupla, puedes dejarlo mucho más bonito (todos los pasos en el código).

2. Conoce y usa las funciones built-in

¿Por qué es importante? Porque esas funciones de Python están escritas directamente en C. Si tú implementas esas funciones a mano, tendrán que interpretarse en código Python, lo cual es más lento.

3. Usa in para buscar en listas

Esto va muy de la mano del punto anterior. En lugar de usar find o de implementar tu propia función de búsqueda, usa in siempre que quieras comprobar si un elemento está en una lista. Es muy idiomático y limpio.

>>> 1 in [1, 2, 3]
True

4. Haz buenas migas con los list comprehensions

Esta es otra herramienta muy característica de Python. La base de esto es construir listas de una manera muy cómoda. La sintaxis básica es:

[variable for variable in lista]

Si quieres usar un condicional, puedes hacerlo.

[variable for variable in lista if condicion]

Y si quieres un if-else

[variable if condicion else otro_valor for variable in lista]

Ahora toca ver unos cuantos ejemplos.

5. Usa funciones generadoras para ahorrar memoria

El ejemplo más clásico de las funciones generadoras es range. No es lo mismo tener una función que te dice cómo generar 1000 valores, que tener 1000 valores guardados. La prueba:

>>> sys.getsizeof(range(1000))
48
>>> sys.getsizeof(list(range(1000)))
8056

En la primera línea lo que hay es un objeto que genera 1000 números bajo demanda, pesa 48 bytes. Sin embargo, la segunda línea lo que tiene es una lista con esos 1000 números en memoria, pesando 8 Kb.

Tú puedes hacer funciones generadoras usando la palabra yield. Te voy a poner un ejemplo muy tonto pero ilustrativo.

NOTA: Cuando tienes un generador (excepto con range), no puedes hacer generador[10], pues no está todo el conjunto de elementos en memoria, pero sí que puedes iterarlo con un for o list comprehension.

6. Python 3.8 o más: Operador walrus

A partir de la versión 3.8 Python tiene un operador que es este := y se llama el operador "morsa" (porque parece una morsa tumbada de lado).

Este operador te permite hacer una asignación dentro de otra expresión. Ejemplo

numero = 2

if (potencia := numero**2) > 3:
  print(potencia)

Ese código va a imprimir 4, porque se está haciendo la asignación de la variable potencia dentro de la misma expresión del if.

Otro ejemplo:

while (user_input := input("Escribe 'exit' para salir")) != "exit":
    print(user_input)

Ese bucle while se va a ejecutar eternamente hasta que el usuario escriba exit pero, además, tendrás acceso a lo que escriba el usuario en la variable user_input.

Recapitulación

Básicamente lo que has aprendido es que debes o puedes:

  • Intercambiar valores de variables en una sola sentencia
  • Conocer y usa las funciones built-in
  • Usar in para buscar en listas
  • Llevarte bien con los list comprehensions
  • Usar funciones generadoras para ahorrar memoria
  • Si estás en Python 3.8 o más: Operador walrus

Espero que te haya parecido interesante. Si conoces más cosas del estilo que se puedan hacer con Python, te leo en los comentarios!

Recuerda entrar en la web de Core si quieres aprender Data Sciente/Machine Learning o aprender a programar "Cloud Native"!

Hasta el siguiente post!

11