Когда речь заходит о переборе элементов в Python, часто упоминаются два понятия: итераторы и генераторы. Но что это такое и в чем между ними разница?
Освойте Python на курсе от Skypro. Вас ждут 400 часов обучения и практики (достаточно десяти часов в неделю), подготовка проектов для портфолио, индивидуальная проверка домашних заданий и помощь опытных наставников. Получится, даже если у вас нет опыта в IT.
Итераторы
Итератор — это объект, который позволяет обойти все элементы коллекции (список, кортеж, словарь и т.д.). Итераторы создаются с помощью двух методов: __iter__() и __next__().
Пример итератора:
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))
В этом примере MyNumbers — это класс, который реализует протокол итератора. В методе __iter__() устанавливается начальное значение для a, а __next__() возвращает следующее значение при каждом вызове.
Генераторы
Генераторы в Python — это более простой способ создания итераторов. Генератор — это специальная функция, которая возвращает итератор. Вместо использования __iter__() и __next__(), в генераторах используется ключевое слово yield.
Пример генератора:
def my_numbers():
a = 1
while True:
yield a
a += 1
mygen = my_numbers()
print(next(mygen))
print(next(mygen))
print(next(mygen))
print(next(mygen))
В этом примере my_numbers — это генератор. При вызове этой функции возвращается итератор, который можно использовать для перебора чисел.
На курсе Skypro «Python-разработчик» освоите основные инструменты программирования, получите опыт на реальных проектах и сможете стартовать в профессии уверенным новичком. Преподаватели — практикующие программисты с большим опытом, а в центре карьеры помогут составить цепляющее резюме и подготовиться к собеседованию.
В чем разница?
Основное отличие генераторов от итераторов заключается в том, как они создаются. Итераторы требуют больше кода и больше понимания протокола итератора. Генераторы же позволяют создать итератор более простым и удобным способом.
В общем, итераторы и генераторы обеспечивают удобный способ работы с коллекциями данных в Python. Они позволяют перебирать элементы коллекций, не загружая все элементы в память одновременно, что делает их очень эффективными для работы с большими наборами данных.
Перейти в телеграм, чтобы получить результаты теста





Забрать
Добавить комментарий