Un generador en Python es una función especial que devuelve un objeto iterable (un iterador) que podemos iterar (o recorrer) un elemento a la vez. Los generadores se implementan utilizando la declaración “yield” en lugar de “return”. La principal diferencia entre ellos es que, mientras una declaración return termina una función por completo, yield pausa la función y guarda su estado para reanudarla donde lo dejó en llamadas sucesivas.
Los generadores son eficientes porque no necesitan almacenar todos los elementos en la memoria a la vez, lo cual los hace particularmente útiles para trabajar con grandes cantidades de datos.
Un simple ejemplo de generador sería:
```python
def simple_generator():
yield 1
yield 2
yield 3
print(next(gen)) # salida: 1
print(next(gen)) # salida: 2
print(next(gen)) # salida: 3
print(next(gen)) # esto arrojará un error StopIteration porque todos los elementos han sido iterados/recorridos
```