Python·100 питань

Що таке ітератор і ітерируваний об'єкт?

Відповідь

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

Ітератор, у свою чергу, є самостійним об'єктом стану, який пам'ятає поточну позицію і знає, як отримати наступний елемент.

Щоб чітко розуміти різницю і механіку роботи цих сутностей, розглянемо по кроках, як влаштований процес ітерації під капотом:

Ви передаєте ітерируваний об'єкт у вбудовану функцію iter(obj), яка звертається до його внутрішнього методу __iter__ і повертає повноцінний ітератор.
Цикл for або інший споживач починає викликати функцію next(it) для отриманого ітератора.
Ітератор повертає наступний елемент послідовності, кожного разу зрушуючи внутрішній вказівник вперед.
Коли елементи закінчуються, ітератор збуджує спеціальний виняток StopIteration, який сигналізує циклу про необхідність завершити роботу.

Важливо зазначити, що будь-які генератори функцій та виразів також є ітераторами, оскільки вони ліниво обчислюють значення на льоту і витрачають мінімальну кількість оперативної пам'яті.

Чи корисна ця відповідь?

Інші питання цієї теми

Пов’язані питання з інших тем