Mastering Python Yield: A Guide to Improved Programming Techniques
Python yield - это оператор, используемый в Python для создания генераторов. Он позволяет функции возвращать значения, но не прерывая ее выполнение. Когда функция достигает оператора yield, она возвращает значение, и запоминает свое состояние, чтобы в следующий раз продолжать выполнение с той же точки.
Вот пример простой функции, которая использует оператор yield:
def my_range(n):
i = 0
while i < n:
yield i
i += 1
Эта функция создает генератор, который возвращает целые числа от 0 до n - 1. Он не генерирует все числа сразу, как range(), а создает отложенный генератор.
Вы можете использовать функцию my_range() для создания последовательности целых чисел:
for i in my_range(5):
print(i)
# вывод
# 0
# 1
# 2
# 3
# 4
Каждый раз, когда доходит дело до оператора yield, функция my_range() возвращает текущее значение i, а затем приостанавливает свое выполнение до следующего вызова.
Таким образом, использование оператора yield помогает экономить ресурсы, так как функция не создает все элементы последовательности сразу, а создает их только в тот момент, когда они запрашиваются.
Кроме того, генераторы могут обрабатывать большие объемы данных, которые не помещаются в памяти, а также повышать производительность и уменьшать время работы программы.
Вот еще один пример использования оператора yield:
def my_filter(lst, func):
for elem in lst:
if func(elem):
yield elem
Эта функция создает генератор, который фильтрует элементы последовательности lst в соответствии с заданным условием, определяемым функцией func. Он возвращает только те элементы, которые удовлетворяют условию.
Вы можете использовать функцию my_filter() для фильтрации списка целых чисел:
lst = [1, 2, 3, 4, 5]
even_nums = list(my_filter(lst, lambda x: x % 2 == 0))
print(even_nums)
# вывод
# [2, 4]
Эта программа создает список even_nums, который содержит только четные числа из списка lst.
Таким образом, использование оператора yield позволяет создавать генераторы, которые экономят память и обрабатывают большие объемы данных. Генераторы также могут использоваться для эффективного фильтрования, преобразования и анализа данных.