6 Cositas sabrosas que hacer con Python
Tags: python, tutorial, principiante, beginners
Published: 2021-07-15 16:10:31

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](https://www.corecode.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

{% replit @alesanmed/VarSwap %}

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).

{% replit @alesanmed/VarSwapV4 %}

## 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.

[Aquí](https://docs.python.org/3/library/functions.html) tienes todas las funciones *built-in* de Python. Un resumen de ellas:

![Lista con las built-in functions de python](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1kt1ubfdlrnpdhkgo24l.png)
 
## 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:

```python
[variable for variable in lista]
```

Si quieres usar un condicional, puedes hacerlo.

```python
[variable for variable in lista if condicion]
```

Y si quieres un `if-else`

```python
[variable if condicion else otro_valor for variable in lista]
```

Ahora toca ver unos cuantos ejemplos.

{% replit @alesanmed/ListComprehension %}

## 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:

```python
>>> 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.

{% replit @alesanmed/Generator-functions %}

> 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

```python
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:

```python
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](https://www.corecode.school/) si quieres aprender Data Sciente/Machine Learning o aprender a programar "Cloud Native"!

Hasta el siguiente post!