Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Протокол Ітератора | Python Iterators
Концепції функціонального програмування в Python

bookПротокол Ітератора

Свайпніть щоб показати меню

У Python ітераторний протокол — це набір методів, які дозволяють об'єктам бути ітерованими, роблячи їх сумісними з конструкціями на кшталт циклів for. Два основних методи, що використовуються, — це __iter__ та __next__. Коли ви використовуєте цикл for для об'єкта, Python внутрішньо викликає метод __iter__ цього об'єкта для отримання ітератора. Цей ітератор повинен мати метод __next__, який повертає наступний елемент послідовності при кожному виклику. Коли елементи закінчуються, __next__ повинен згенерувати виключення StopIteration, щоб позначити кінець послідовності.

1234567891011121314151617181920212223242526
class SquaresIterator: # Initialize with the number of squares to generate def __init__(self, limit): self.limit = limit self.current = 0 # Return the iterator object (itself) def __iter__(self): return self # Return the next square, or stop if done def __next__(self): if self.current < self.limit: # Calculate square result = self.current ** 2 # Move to next number self.current += 1 return result # If no more items else: raise StopIteration for square in SquaresIterator(5): print(square)
copy

__init__ — етап налаштування

Під час створення ітератора він отримує:

  • limit → скільки чисел потрібно згенерувати;

  • Встановлює current = 0 → початкова точка;

  • Готує все необхідне для ітерації.

__iter__ – Робить об'єкт ітерованим

  • Повертає self (сам об'єкт);
  • Саме це дозволяє використовувати об'єкт у циклі for.

__next__ – Генерація значень

Цей метод викликається кожного разу, коли цикл запитує наступний елемент:

  • Якщо current < limit:
    • Обчислити current²;
    • Збільшити current на 1;
    • Повернути результат.
  • Якщо currentlimit:
    • Викликати StopIteration для автоматичної зупинки циклу.
question mark

Яка з наведених умов є необхідною, щоб об'єкт вважався ітерованим у Python?

Виберіть правильну відповідь

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 5. Розділ 3

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Секція 5. Розділ 3
some-alt