Я хотел узнать немного больше о iterators
, поэтому, пожалуйста, поправьте меня, если я ошибаюсь.
Итератор - это объект, который имеет указатель на следующий объект и считывается как буфер или поток (т.е. связанный список). Они особенно эффективны, потому что все, что они делают, это сказать вам, что будет дальше по ссылкам вместо использования индексации.
Однако я до сих пор не понимаю, почему происходит следующее поведение:
In [1]: iter = (i for i in range(5))
In [2]: for _ in iter:
....: print _
....:
0
1
2
3
4
In [3]: for _ in iter:
....: print _
....:
In [4]:
После первого цикла через итератор (In [2]
) он как бы был уничтожен и оставлен пустым, поэтому второй цикл (In [3]
) ничего не печатает.
Однако я никогда не назначал новое значение переменной iter
.
Что действительно происходит под капотом цикла for
?