Funcions generadores¶
Les funcions generadores (o generadors) són la manera més pràctica de definir iteradors de Python.
Sintaxi:
def nom_funcio(...):
...
yield valor1
...
yield valor2
...
Atenció
Una funció generadora no retorna res, sinó que genera elements de la seqüencia amb la sentència yield.
Quan es crida a una funció generadora, s’obté un iterador.
Exemples de generadors: Vegeu el fitxer generadors.py
Per obtenir la seqüència d’elements d’un iterador d’un en un cal utilitzar
next()
.Quan s’arriba al final de la seqüencia, l’iterador s’exhaureix, provocant l’error
StopIteration
.Per accedir a tots els elements d’un iterador, fem servir
for elem in iterador:
Suggerència
La funció next()
admet un segon paràmetre opcional, que és el valor que retorna en el cas que l’iterador s’hagi exhaurit (i així no provocar StopIteration
).
Els iteradors de Python poden generar seqüències infinites (potencialment).
Truc
Per obtenir un generador infinit podem utilitzar
while True:
def senars():
i = 1
while True:
yield i
i = i + 2
>>> it = senars()
>>> next(it)
1
>>> for x in it:
... print(x)
3
5
7
... # CTRL-C per parar-ho