Рубрики

Когда использовать yield вместо return в Python?

Оператор yield приостанавливает выполнение функции и отправляет значение обратно вызывающей стороне, но сохраняет достаточно состояния, чтобы функция могла возобновить работу с того места, где она остановлена. После возобновления функция продолжает выполняться сразу после последнего запуска yield. Это позволяет его коду создавать серии значений с течением времени, а не вычислять их сразу и отправлять обратно как список.

Давайте посмотрим на примере:

# Простая программа на Python для демонстрации работы
# доходность

  
# Функция генератора, которая выдает 1 в первый раз,
# 2 второй раз и 3 третий раз

def simpleGeneratorFun():

    yield 1

    yield 2

    yield 3

  
# Код драйвера для проверки над функцией генератора

for value in simpleGeneratorFun(): 

    print(value)

Выход:

1
2
3

Return отправляет указанное значение обратно своему вызывающему, тогда как Yield может генерировать последовательность значений. Мы должны использовать yield, когда хотим перебрать последовательность, но не хотим сохранять всю последовательность в памяти.

Доходность используется в генераторах Python. Функция генератора определяется как обычная функция, но всякий раз, когда ей нужно сгенерировать значение, она делает это с помощью ключевого слова yield, а не return. Если тело def содержит yield, функция автоматически становится функцией генератора.

# Программа Python для генерации квадратов из 1
# до 100, используя урожай и, следовательно, генератор

  
# Бесконечная генераторная функция, которая печатает
# следующий квадратный номер. Начинается с 1

def nextSquare():

    i = 1;

  

    # Бесконечный цикл для генерации квадратов

    while True:

        yield i*i                

        i += 1  # Следующее выполнение возобновляется

                # с этого момента

  
# Код драйвера для проверки над генератором
# функция

for num in nextSquare():

    if num > 100:

         break    

    print(num)

Выход:

1
4
9
16
25
36
49
64
81
100

Эта статья предоставлена Арпит Агарвал . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Когда использовать yield вместо return в Python?

0.00 (0%) 0 votes