[Python] Iteratori iterabile

Davide Brunato brunato a sissa.it
Gio 6 Lug 2017 09:19:40 CEST


On 07/05/2017 08:53 PM, Franky gmail wrote:
> Ciao,
> 
> Leggendo la pep-0234, in sintesi un oggetto iteratore deve avere due
> metodi: oggetto.__iter__() e oggetto.__next__). correggetemi se ho
> inteso male.
> 
> faccio un esempio:
> 
> creo una lista lista=['pippo', 'pluto', 'paperoga']
> 
> hasattr(lista,'__iter__') # vero
> 
> hasattr(lista,'__next__') # falso
> 
> quindi una lista (succede la stessa cosa anche con un set) non è un
> iteratore perchè non possiede entrambi i metodi sopraccitati. Però se
> creo un oggetto di tipo lista, possiede entrambi i metodi:
> 
> lista1 = lista.__iter__()
>

lista1 è un'iteratore, non più una lista e il metodo __iter__ serve
appunto per creare iteratori:

  iteratore_lista = iter(lista)
  next(iteratore_lista)  # 'pippo'
  next(iteratore_lista)  # 'pluto'
  next(iteratore_lista)  # 'paperoga'
  next(iteratore_lista)  # raise StopIteration

comunque per capire bene la tematica degli iteratori (e dei generatori)
a me è stato utile questo articolo:

  http://nvie.com/posts/iterators-vs-generators/

(NB: la figura ad inizio articolo me la sono stampata e appesa bacheca
per quando mi vengono dei dubbi ...)


Maggiori informazioni sulla lista Python