Учебник по Python

ДОМАШНЯЯ СТРАНИЦА ПИТОН Введение в Python Python для начала Синтаксис Python Комментарии Python Переменные Python Типы данных Python Числа Python Кастинг Python Строки Python Логические значения Python Операторы Python Списки Python Кортежи Python Наборы Python Словари Python Python, если...иначе Циклы Python в то время как Python для циклов Функции Python Python лямбда Массивы Python Классы/объекты Python Наследование Питона Итераторы Python Объем Python Модули Python Даты Python Математика Python Python JSON регулярное выражение Python Картинка в картинке Python Python Попробуйте... Кроме Пользовательский ввод Python Форматирование строк Python

Работа с файлами

Обработка файлов Python Файлы чтения Python Python Запись/создание файлов Удалить файлы Python

Модули Python

Учебник по NumPy Прохождение панды Учебник по Сципи

Python Matplotlib

Введение в Matplotlib Matplotlib Начать Пилот Matplotlib Графики Matplotlib Маркеры Matplotlib Линия Matplotlib Метки Matplotlib Сетка Matplotlib Подсюжеты Matplotlib Матплотлиб Скаттер Бары Matplotlib Гистограммы Matplotlib Круговые диаграммы Matplotlib

Машинное обучение

Начиная Средняя медиана режима Среднеквадратичное отклонение Процентиль Распределение данных Нормальное распределение данных Точечная диаграмма Линейная регрессия Полиномиальная регрессия Множественная регрессия Масштаб Поезд/тест Древо решений

Python MySQL

Начать работу с MySQL MySQL Создать базу данных MySQL Создать таблицу Вставка MySQL Выбор MySQL MySQL Где Порядок MySQL MySQL Удалить Таблица удаления MySQL Обновление MySQL Лимит MySQL MySQL присоединиться

Python MongoDB

Начать работу с MongoDB MongoDB Создать базу данных MongoDB Создать коллекцию Вставка MongoDB MongoDB Найти Запрос MongoDB Сортировка MongoDB MongoDB Удалить Коллекция MongoDB Drop Обновление MongoDB Лимит MongoDB

Справочник по Python

Обзор Python Встроенные функции Python Строковые методы Python Методы списка Python Словарные методы Python Методы кортежей Python Методы набора Python Файловые методы Python Ключевые слова Python Исключения Python Глоссарий Python

Справочник по модулям

Случайный модуль Модуль запросов Модуль статистики Математический модуль cМатематический модуль

Python Как

Удалить дубликаты списка Перевернуть строку Добавить два числа

Примеры Python

Примеры Python Компилятор Python Упражнения на Python Питон Викторина Сертификат Python

Итераторы Python


Итераторы Python

Итератор — это объект, который содержит счетное количество значений.

Итератор — это объект, по которому можно выполнять итерацию, что означает, что вы можете пройти через все значения.

Технически, в Python итератор — это объект, реализующий протокол итератора, состоящий из методов __iter__() и __next__().


Итератор против итерируемого

Списки, кортежи, словари и наборы — все это повторяемые объекты. Это итерируемые контейнеры , из которых вы можете получить итератор.

У всех этих объектов есть iter()метод, который используется для получения итератора:

Пример

Возвратите итератор из кортежа и напечатайте каждое значение:

mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)

print(next(myit))
print(next(myit))
print(next(myit))

Даже строки являются итерируемыми объектами и могут возвращать итератор:

Пример

Строки также являются итерируемыми объектами, содержащими последовательность символов:

mystr = "banana"
myit = iter(mystr)

print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))

Цикл через итератор

Мы также можем использовать forцикл для итерации по итерируемому объекту:

Пример

Повторить значения кортежа:

mytuple = ("apple", "banana", "cherry")

for x in mytuple:
  print(x)

Пример

Итерация символов строки:

mystr = "banana"

for x in mystr:
  print(x)

Цикл forфактически создает объект итератора и выполняет метод next() для каждого цикла.



Создать итератор

Чтобы создать объект/класс в качестве итератора, вы должны реализовать методы __iter__()и __next__()свой объект.

Как вы узнали из главы « Классы/объекты Python» , все классы имеют функцию с именем __init__(), которая позволяет выполнять некоторую инициализацию при создании объекта.

Метод __iter__()действует аналогично, вы можете выполнять операции (инициализация и т. д.), но всегда должны возвращать сам объект итератора.

Метод __next__()также позволяет выполнять операции и должен возвращать следующий элемент в последовательности.

Пример

Создайте итератор, который возвращает числа, начиная с 1, и каждая последовательность будет увеличиваться на единицу (возвращая 1,2,3,4,5 и т. д.):

class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self

  def __next__(self):
    x = self.a
    self.a += 1
    return x

myclass = MyNumbers()
myiter = iter(myclass)

print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))

Остановить итерацию

Приведенный выше пример будет продолжаться вечно, если у вас будет достаточно операторов next() или если он будет использоваться в forцикле.

Чтобы итерация не продолжалась вечно, мы можем использовать StopIterationоператор.

В __next__()методе мы можем добавить завершающее условие, чтобы вызвать ошибку, если итерация выполняется заданное количество раз:

Пример

Остановиться после 20 итераций:

class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self

  def __next__(self):
    if self.a <= 20:
      x = self.a
      self.a += 1
      return x
    else:
      raise StopIteration

myclass = MyNumbers()
myiter = iter(myclass)

for x in myiter:
  print(x)