В Python генераторы, декораторы и итераторы являются мощными инструментами, которые облегчают решение различных задач. Давайте рассмотрим каждую из этих концепций подробнее.
Это функции, которые позволяют вам итерировать через набор данных. Они используются для создания итераторов в 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
Это функции, которые модифицируют или расширяют поведение других функций или методов. Они часто используются для логирования, контроля доступа, измерения времени выполнения и других задач.
def my_decorator(func):
def wrapper():
print("Что-то происходит до вызова функции")
func()
print("Что-то происходит после вызова функции")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
# Вывод:
# Что-то происходит до вызова функции
# Hello!
# Что-то происходит после вызова функции
Это объекты, которые позволяют перебирать (итерировать) элементы коллекции (например, списков, кортежей и т.д.). Итератор должен реализовывать методы
__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
Упрощают создание итераторов. Они позволяют создать итератор с минимальными усилиями и потребляют меньше памяти, поскольку не загружают все значения сразу.
Позволяют изменять поведение функции или метода без изменения их кода. Они часто используются для добавления кода, который выполняется до или после основной функции.
Предоставляют интерфейс для последовательного доступа к элементам коллекции без необходимости знать внутреннюю структуру коллекции.
Ставь 👍 и забирай 📚 Базу знаний