Anuncios

Bienvenidos sean a este post, hoy hablaremos sobre otra construccion interesante derivada de las funciones generadoras.

Anuncios

Esta expresion te permite producir (yield) valores desde una sub iterador, se lo usa para patrones avanzados pero vamos a ver un rapido ejemplo:

>>> def imprimir_cuadrados(inicio, final) :
...     for n in range(inicio, final):
...             yield n ** 2
... 
>>>
Anuncios

Esta es una funcion simple que imprimira el cuadrado de un rango de numeros que pasaremos en los atributos, despues usaremos un bucle con los valores informados y los procesaremos con el yield como vimos hasta ahora, para verificar su funcionamiento haremos lo siguiente:

>>> for n in imprimir_cuadrados(2, 5):
...     print(n)
... 
4
9
16
>>>
Anuncios

Si se preguntan como sucedio esta magia, es debido al nuevo bucle for donde la busqueda por el iterador generado por imprimir_cuadrados llamara a next para obtener los valores, por esta razon si imprimimos el valor obtenido en n funciono de manera correcta y el for al detectar StopIteration finaliza con el bucle sin devolver ningun error, pasemos a convertir la funcion a una expresion yield from mediante la siguiente modificacion:

>>> def imprimir_cuadrados(inicio, final):
...     yield from (n ** 2 for n in range(inicio, final))
... 
>>>
Anuncios

En este ejemplo vemos que si usamos a yield from seguido de una comprension de list como vimos hasta ahora donde genera el cuadrado del valor de n obtenido por el bucle siguiente, tecnicamnte es lo mismo a lo visto anteriormente pero con comprension aplicada, vamos a probarlo para ver que sucede:

>>> for n in imprimir_cuadrados(2, 5):
...     print(n)
... 
4
9
16
>>>
Anuncios

Funciona de la misma forma, esto es gracias a la expresion yield from que produce los valores a traves del iterador que generamos en la comprension, este no solo se ve mas reducido sino que tambien se lee mejor y es mas python 😉

Anuncios

En resumen, hoy hemos visto a la expresion yield from, una forma mas avanzada de poder obtener datos desde una sub iteracion contenida en una comprension ya sea de list, dict o set, en el ejemplo que vimos fue de list, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Donación

Es para mantenimento del sitio, gracias!

$1.50