Ce face iter() și next()
Bucla for folosește în spate aceste două funcții: cere un iterator cu iter() și ia elementele cu next() până când apare StopIteration. Le poți folosi și direct, de exemplu pentru a lua doar primul element sau pentru a sări peste antetul unui fișier.
next(iterator, implicit) returnează implicit în loc să arunce StopIteration când nu mai sunt elemente. Forma iter(functie, santinela) apelează funcția repetat până când rezultatul este egal cu santinela.
Parametri
| Parametru | Descriere |
|---|---|
iterabil |
O colecție sau orice obiect care poate fi parcurs. |
functie, santinela |
Forma a doua a lui iter(): o funcție fără argumente și valoarea la care se oprește. |
iterator |
Iteratorul din care next() ia elementul. |
implicit |
Opțional. Valoarea returnată de next() când iteratorul s-a terminat. |
Ce returnează
iter(): un iterator. next(): următorul element.
Exemple
Exemplul 1: Pas cu pas
it = iter(["a", "b"])
print(next(it))
print(next(it))
print(next(it, "gata"))
try:
next(it)
except StopIteration:
print("StopIteration")
Rezultat
a
b
gata
StopIteration
Exemplul 2: Primul element care îndeplinește o condiție
note = [6, 8, 10, 9]
prima_maxima = next((i for i, n in enumerate(note) if n == 10), None)
print(prima_maxima)
print(next((n for n in note if n > 10), "niciuna"))
Rezultat
2
niciuna
Exemplul 3: Sărirea peste antet
randuri = iter(["nume,oras", "Ana,Iași", "Mihai,Cluj"])
antet = next(randuri)
print("Antet:", antet)
for rand in randuri:
print(rand.split(","))
Rezultat
Antet: nume,oras
['Ana', 'Iași']
['Mihai', 'Cluj']
Greșeli frecvente
- Apelezi
next()direct pe o listă:next([1, 2])dăTypeError: 'list' object is not an iterator. Obține întâi iteratorul cuiter().
Comenzi înrudite
yield (generatoare): Transformă o funcție într-un generator, care produce valorile una câte una, la cerere.for: Parcurge, pe rând, fiecare element dintr-o listă, text, dicționar sau alt obiect iterabil.itertools.islice(): Ia o „felie” dintr-un iterator sau generator, ca [start:stop:pas] la liste.async / await: Scrie cod asincron: funcții care pot aștepta (rețea, fișiere, temporizări) fără să blocheze restul programului.