Ітерабельні об'єкти
Пригадаємо цикл for ... in
.
Давайте за допомогою цього цикла переберемо усі елементи списка:
>>> for i in [1,3,5,7]: print(i)
...
1
3
5
7
>>>
Зі списком усе зрозуміло: при черговому проході, або ж іншими словами — при кожній ітерації, ми отримуємо один черговий елемент списка. Доречі, список є контейнером.
Контейнер — це тип даних, який інкапсулює в себе значення інших типів.
Тепер спробуємо так:
>>> for i in range(4): print(i)
...
0
1
2
3
>>>
Результат для нас вже очікуваний.
Але range
не є контейнером,
він не містить у собі чисел які ми перебираємо циклом!
А ще, як нам вже відомо,
за допомогою цикла for
можна "пройтись" по символьним рядкам, словникам, навіть текстовим файлам.
Тобто одна інструкція for...in
виконує над об'єктами різних типів дуже схожі дії,
а саме "перебирає" по одному значенню вміст цього об'єкта.
З цього виникає декілька питань:
- що спільного є у об'єктів які можна перебирати за допомогою цикла
for
? - чи можемо ми якось це використати, наприклад створити свій тип даних по якому теж можна буде ітеруватись?
- чи можна використати ці властивості ще якимось чином?
Ітерабельний об'єкт (в оригіналій термінології — іменник iterable) — це об'єкт, який може повертати значення по одному за раз.
Ітерабельні об'єкти можуть бути використані всередині цикла for
,
а також у багатьох інших випадках,
коли очікується послідовність, наприклад як аргумент для функції sum()
.