Python 3 yield: что это и зачем использовать?
"yield" в Python 3 — это ключевое слово, используемое для создания генераторов. Генераторы позволяют создавать итерируемые объекты, которые могут возвращать значения одно за другим, не загружая все значения в память одновременно.
Вот простой пример использования "yield" в функции:
def generate_numbers():
for i in range(1, 6):
yield i
numbers = generate_numbers()
for num in numbers:
print(num)
В этом примере функция "generate_numbers" содержит ключевое слово "yield", которое возвращает числа от 1 до 5 одно за другим при каждом вызове "next()". Таким образом, мы можем итерироваться по числам, не храня их все в памяти одновременно.
Детальный ответ
Python 3: Что это такое "yield"?
"yield" - это ключевое слово в Python 3, используемое внутри функций. Оно позволяет функции стать генератором - объектом, который может временно приостановить своё выполнение и затем возобновить его позже. Генераторы предоставляют удобный способ создавать итерируемые объекты с помощью относительно небольшого объема кода.
Когда функция, содержащая ключевое слово "yield", вызывается, она не выполняет свой код полностью, как обычная функция. Вместо этого, она возвращает генераторное выражение, которое может использоваться для итерации по результатам выполнения функции.
Пример:
def my_generator():
yield 1
yield 2
yield 3
# Создаем генераторный объект
generator = my_generator()
# Итерируем по результатам выполнения функции с помощью генераторного объекта
for value in generator:
print(value)
# Вывод:
# 1
# 2
# 3
В данном примере, функция "my_generator" - это генераторная функция, так как она содержит ключевое слово "yield". Когда мы вызываем эту функцию и присваиваем результат переменной "generator", мы создаем генераторный объект.
Затем мы можем использовать этот объект в цикле "for" для итерации по всем значениям, возвращаемым генераторной функцией. Каждый вызов ключевого слова "yield" в функции останавливает её выполнение и возвращает значение, которое представляет собой текущий результат этой итерации. Когда мы продолжаем итерацию, функция возобновляется с того места, где она остановилась, и продолжает своё выполнение.
"yield" также позволяет генераторам возвращать значения на каждой итерации, и даже принимать значения от внешнего кода. Это делает их мощными инструментами для обработки больших объемов данных или создания бесконечных последовательностей.
Пример использования генератора для генерации бесконечной последовательности чисел:
def infinite_sequence():
num = 0
while True:
yield num
num += 1
# Создание генераторного объекта
sequence = infinite_sequence()
# Итерация по бесконечной последовательности
for value in sequence:
print(value)
# Вывод:
# 0
# 1
# 2
# ...
В этом примере генераторная функция "infinite_sequence" возвращает бесконечную последовательность чисел, начиная с 0. Мы можем использовать этот генератор в цикле "for" и он будет продолжать возвращать следующее число при каждой итерации.
В заключение, ключевое слово "yield" в Python 3 позволяет функциям быть генераторами и создавать итерируемые объекты. Генераторы могут временно приостанавливать своё выполнение и возвращать результаты на каждой итерации. Они очень полезны для обработки больших объемов данных, работы с последовательностями и создания эффективных итераций.