lunes, 7 de marzo de 2011

Generadores en python

Un objeto es iterable si es físicamente almacenado en una secuencia o un objeto que produce un resulto a la vez de una herramienta iterativa como la repetición 'for'. Los objetos iterables tienen implementado el método 'next()' , __next__() en python3.

Se puede iterar de distintas maneras listas de comprensión, for, while y generadores. Los generadores se dividen en funciones generadoras que devuelven un valor a la vez por medio de la sentencia yield, suspendiendo y resumiendo el estado del generador cada vez que se llama al siguiente elemento.



En este código se devuelve un elemento cada vez que se llama a la sentencia 'yield' sin tener que almacenar todos los valores en memoria.

El otro generador se denomina generadores de expresiones que funcionan de forma parecida a la comprensión de listas; debido a que, se pueden utilizar solamente expresiones y no bloques en su sintaxis, utilizan paréntesis en vez de corchetes en su sintaxis. Sin embargo, los generadores devuelven un objeto generador en vez de una lista en cada iteración.



Al final de una iteración siempre se levanta una excepción 'StopIteration', en el caso de la sentencia 'for' está excepción es tratada. Obteniendo los valores uno a la vez, los generadores permiten tener mejor rendimiento de memoria a costa de un mayor procesamiento. Su uso es adecuado en secuencias infinitas, o en secuencias de gran tamaño que vayan a tener que ser cargadas a memoria.

No hay comentarios:

Publicar un comentario