В Python генераторы, декораторы и итераторы являются мощными инструментами, которые облегчают решение различных задач. Давайте рассмотрим каждую из этих концепций подробнее.
🚩Генератор (Generator)
Это функции, которые позволяют вам итерировать через набор данных. Они используются для создания итераторов в Python. Генераторы создаются с использованием ключевого слова
yield. def simple_generator():
yield 1
yield 2
yield 3
gen = simple_generator()
print(next(gen)) # Вывод: 1
print(next(gen)) # Вывод: 2
print(next(gen)) # Вывод: 3
🚩Декоратор (Decorator)
Это функции, которые модифицируют или расширяют поведение других функций или методов. Они часто используются для логирования, контроля доступа, измерения времени выполнения и других задач.
def my_decorator(func):
def wrapper():
print("Что-то происходит до вызова функции")
func()
print("Что-то происходит после вызова функции")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
# Вывод:
# Что-то происходит до вызова функции
# Hello!
# Что-то происходит после вызова функции
🚩Итератор (Iterator)
Это объекты, которые позволяют перебирать (итерировать) элементы коллекции (например, списков, кортежей и т.д.). Итератор должен реализовывать методы
__iter__() и __next__().class MyIterator:
def __init__(self, limit):
self.limit = limit
self.counter = 0
def __iter__(self):
return self
def __next__(self):
if self.counter < self.limit:
self.counter += 1
return self.counter
else:
raise StopIteration
my_iter = MyIterator(3)
for num in my_iter:
print(num)
# Вывод:
# 1
# 2
# 3
🚩Сравнение и использование
🟠Генераторы
Упрощают создание итераторов. Они позволяют создать итератор с минимальными усилиями и потребляют меньше памяти, поскольку не загружают все значения сразу.
🟠Декораторы
Позволяют изменять поведение функции или метода без изменения их кода. Они часто используются для добавления кода, который выполняется до или после основной функции.
🟠Итераторы
Предоставляют интерфейс для последовательного доступа к элементам коллекции без необходимости знать внутреннюю структуру коллекции.
Ставь 👍 и забирай 📚 Базу знаний