Перейти до змісту

Ітерабельні об'єкти

Пригадаємо цикл 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().

Back to top