Generador (Python)

Explicació sobre què és un generador en Python, com utilitza la paraula clau yield per crear iteradors eficients, i exemples pràctics amb funcions i bucles for.

« Back to Glossary Index
Icona minimalista que representa el concepte “Generador” en Python: tres punts grisos a l’esquerra i una fletxa fúcsia corba que simbolitza el flux seqüencial dels valors produïts amb yield. Estil modern i tecnològic, paleta de colors deGalaLab (#FC3869 i tons grisos)

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 com sum() o any().

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 llistes guarden tots els valors a la memòria.
  • Els generadors calculen cada valor sobre la marxa (lazy evaluation).

Vegeu també

  • Iterador (Python): objecte retornat per iter() o per una funció amb yield.
  • Iterable (Python): objecte que pot proporcionar un iterador.
  • Comprensions de generador: expressió curta entre parèntesis que crea un generador automàticament.
« Back to Glossary Index