
Definició: Un generador en Python és un tipus especial de funció que retorna un iterador. En lloc de fer servir return, utilitza la paraula clau yield per anar retornant valors un darrere l’altre, sense perdre l’estat intern entre crides.
Com funciona un generador
Quan una funció conté yield, no s’executa immediatament. En cridar-la, retorna un objecte generador, que pot ser recorregut amb for o amb next().
def comptar(limit):
for i in range(1, limit + 1):
yield i
# Crea un objecte generador
gen = comptar(3)
print(gen) # <generator object comptar at 0x...>
print(next(gen)) # 1
print(next(gen)) # 2
print(next(gen)) # 3
# StopIteration quan s'acaben els valors
Avantatges dels generadors
- Eficiència en memòria: no creen tota la seqüència d’un cop, sinó que generen cada valor quan cal.
- Fluxos infinits: poden generar valors indefinidament (p. ex. sensors, streams, seqüències).
- Integració nativa: funcionen amb bucles
for, comprensions i funcions comsum()oany().
Exemple d’ús pràctic
def quadrats(n):
for i in range(1, n + 1):
yield i ** 2
for valor in quadrats(5):
print(valor)
# 1, 4, 9, 16, 25
Generadors infinits
Els generadors poden no tenir final si no hi ha una condició de parada:
def comptador_infinit():
n = 1
while True:
yield n
n += 1
# Exemple (es trenca amb break)
for x in comptador_infinit():
if x > 5:
break
print(x)
Comparació amb llistes
- Les
llistesguarden tots els valors a la memòria. - Els
generadorscalculen cada valor sobre la marxa (lazy evaluation).
Vegeu també
- Iterador (Python): objecte retornat per
iter()o per una funció ambyield. - Iterable (Python): objecte que pot proporcionar un iterador.
- Comprensions de generador: expressió curta entre parèntesis que crea un generador automàticament.