Tener conto di:
>>> lst = iter([1,2,3])
>>> next(lst)
1
>>> next(lst)
2
Quindi, l'avanzamento dell'iteratore viene, come previsto, gestito mutando lo stesso oggetto.
Stando così le cose, mi aspetterei:
a = iter(list(range(10)))
for i in a:
print(i)
next(a)
per saltare ogni secondo elemento: la chiamata a next
dovrebbe far avanzare l'iteratore una volta, quindi la chiamata implicita fatta dal loop dovrebbe avanzare una seconda volta - e il risultato di questa seconda chiamata verrebbe assegnato i
.
Non Il ciclo stampa tutti gli elementi nell'elenco, senza saltarne nessuno.
Il mio primo pensiero è stato che ciò potrebbe accadere perché il loop chiama iter
ciò che viene passato e questo potrebbe dare un iteratore indipendente - non è così, come abbiamo fatto iter(a) is a
.
Quindi, perché next
non sembra avanzare l'iteratore in questo caso?