Що таке ітератор і ітерируваний об'єкт?
В екосистемі Python поняття ітерируваного об'єкта та ітератора тісно пов'язані, але виконують різні ролі в процесі обходу колекцій. Ітерируваний об'єкт — це будь-яка структура даних, по елементах якої можна пройтися в циклі for, наприклад, списки, рядки, словники або файли. Такий об'єкт знає, як надати доступ до своїх елементів, але сам по собі стан поточного кроку не зберігає.
Ітератор, у свою чергу, є самостійним об'єктом стану, який пам'ятає поточну позицію і знає, як отримати наступний елемент.
Щоб чітко розуміти різницю і механіку роботи цих сутностей, розглянемо по кроках, як влаштований процес ітерації під капотом:
Важливо зазначити, що будь-які генератори функцій та виразів також є ітераторами, оскільки вони ліниво обчислюють значення на льоту і витрачають мінімальну кількість оперативної пам'яті.