lettura normale

La funzione iter() in Python

La funzione iter() in Python ti permette di creare un iteratore.

iter(x)

Il parametro x è l'oggetto che vuoi trasformare in un iteratore. Ad esempio, una lista, un dizionario, una stringa, ecc.

Una volta trasformato in un iteratore, puoi leggere gli elementi dell'oggetto uno dopo l'altro.

Cos'è un iteratore? Un iteratore è un oggetto che può essere iterato e che restituisce un elemento alla volta. Per estrapolare gli elementi puoi usare un ciclo for, il metodo __next__() o la funzione next().

Ecco un esempio pratico.

Crea una lista.

>>> my_list = [1, 2, 3, 4, 5]

La lista è un oggetto iterabile ma non è ancora un iteratore, perché non possiede l'attributo __next__()

>>> hasattr(my_list, '__next__')
False

Puoi trasformare la lista in un iteratore usando la funzione iter()

>>> obj = iter(my_list)

In alternativa, puoi ottenere lo stesso risultato anche usando il metodo __iter__() sulla lista.

>>> obj = my_list.__iter__()

L'oggetto "obj" è un iteratore perché possiede il metodo __next__()

>>> hasattr(obj, '__next__')
True

Questo vuol dire che puoi estrarre i suoi elementi dal primo all'ultimo, uno alla volta, tramite la funzione next()

>>> next(obj)
1
>>> next(obj)
2
>>> next(obj)
3
>>> next(obj)
4
>>> next(obj)
5
>>> next(obj)
Traceback (most recent call last):
StopIteration

Quando non ci sono più elementi da iterare, il metodo next() solleva l'eccezione "StopIteration"

In alcuni casi la conversione di un oggetto iterabile in un iteratore è automatica e non devi fare nulla.

Ad esempio, quando utilizzi un ciclo for

  1. my_list = [1, 2, 3, 4, 5]
  2. for item in my_list:
  3. print(item)

In questo caso la funzione iter() è richiamata automaticamente dal ciclo for per creare un iteratore e leggere un elemento alla volta in ogni iterazione del ciclo.

Ecco l'output dello script

1
2
3
4
5

L'eccezione StopIteration è gestita in automatico dal ciclo for.

Pertanto, non viene visualizzata sullo schermo.

 




Se qualcosa non ti è chiaro, scrivi la tua domanda nei commenti.




FacebookTwitterLinkedinLinkedin