[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