En Python, ¿qué es un generador, cómo funciona y cómo funciona el ‘rendimiento’?

Un generador es una forma de construir fácilmente iteradores simples.

Un iterador es un objeto que puede iterarse, es decir, usarse por ejemplo en un bucle for. La tarea principal de un interator es obtener el elemento “siguiente”. Cuando iteras sobre una lista, o un ejemplo, lo que estás preguntando al final de cada iteración es “dame el siguiente elemento de la lista”.

Un generador es una función que le proporciona un objeto con esta funcionalidad. Puedes pedirle el elemento “siguiente”. La diferencia con say, a list, es que la lista existe completamente en memoria. Si una lista tiene 100 elementos, los 100 elementos ya están cargados en la memoria a medida que los recorre. El generador es como una “lista virtual”. El siguiente elemento se genera cuando lo solicita.

Un generador utiliza expresiones de rendimiento para darle dicho elemento. Por ejemplo este generador:

def g():
yield 1
yield 2
yield 3

es como una lista virtual que contiene los números 1,2,3. Puedes usarlo en un bucle for

for i in g():
print i

y se imprimirá

1
2
3

La función de generador detiene su ejecución en cada rendimiento. Cada vez que el ciclo solicita el siguiente valor, la función se reanuda desde el punto en que se detuvo, deteniéndose nuevamente en el siguiente rendimiento.

Un ejemplo más complejo tiene el rendimiento en un bucle y puede recibir argumentos de inicialización:

def squares(start, stop):
for i in xrange(start, stop):
yield i * i

Si se usa en un bucle for, este generador le proporciona sucesivos aquares en cada iteración: 1,4,9,16, etc. (utilizando los parámetros de inicio y detención para decir dónde comenzar y cuándo detener la iteración).

El objetivo de los generadores es que son más fáciles de escribir que una clase iteradora completa. Entonces, si necesita un iterador bastante simple, es más conveniente escribirlo como generador. Ver más información aquí: Diferencia entre Python Generators vs Iterators

Mejore su Python: ‘rendimiento’ y generadores explicados. Este artículo ha dado una excelente explicación de los generadores con un ejemplo que muestra su importancia.