Найти в Дзене
Simple Prog

Сравнение операторов yield и return в Python

Оглавление

В этой статье мы расскажем про основные различия между yield и return в Python. А для лучшего понимания этих различий приведем пару примеров.

Встроенное ключевое слово yield используется для создания функций-генераторов.

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

Return также является встроенным ключевым словом в Python. Он завершает функцию, а вызывающей стороне отправляет значение.

Разница между yield и return

Начнем с того, что между yield и return есть много заметных различий. Для начала давайте обсудим их.

Return

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

Yield

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

Пример 1

Теперь давайте рассмотрим разницу между операторами return и yield на примерах.

В приведенном ниже коде мы использовали несколько операторов возврата. Вы можете заметить, что выполнение программы прекратится уже после первого оператора return. Весь код, идущий после, не будет выполнен.

num1 =10
num2=20
def mathOP():
----return num1+num2
----return num1-num2
----return num1*num2
----return num1/num2
print(mathOP())

В выводе видно, что функция возвращает только первое значение, после чего программа завершается.

-2

Чтобы выполнить аналогичную задачу с несколькими операторами return, нам нужно создать четыре разные функции для каждого типа арифметической операции.

num1 =10
num2=20
def sumOP():
----return num1+num2
def subtractOP():
----return num1-num2
def multiplicationOP():
----return num1*num2
def divisionOP():
----return num1/num2
print("The sum value is: ",sumOP())
print("The difference value is: ",subtractOP())
print("The multiplication value is: ",multiplicationOP())
print("The division value is: ",divisionOP())

Запустив данный код, получим следующий результат:

-3

Однако мы можем выполнить эти арифметические операции внутри одной функции-генератора, используя несколько операторов yield.

num1 =10
num2=20
def mathOP():
----yield num1+num2
----yield num1-num2
----yield num1*num2
----yield num1/num2
print("Printing the values:")
for i in mathOP():
----print(i)

Получим результат:

-4

Пример 2

Давайте рассмотрим еще один пример использования операторов return и yield.

Создадим список чисел и передадим его в функцию mod() в качестве аргумента. Далее, внутри функции, мы проверяем каждый элемент списка. Если он делится без остатка на 10, то мы его выводим.

Для начала давайте реализуем этот пример в нашем скрипте Python с использованием оператора return.

myList=[10,20,25,30,35,40,50]
def mod(myList):
----for i in myList:
--------if(i%10==0):
------------return i
print(mod(myList))

Оператор return возвращает только первое число, кратное 10, и завершает выполнение функции.

-5

Теперь давайте реализуем тот же пример, используя оператор yield.

myList=[10,20,25,30,35,40,50]
def mod(myList):
----for i in myList:
--------if(i%10==0):
------------yield i
for i in mod(myList):
----print(i)

Получим следующий результат:

-6

Заключение

В этой статье мы провели сравнение yield и return в Python, перечислили все заметные различия между ними и разобрали это на примерах.

Давайте подытожим.

И return, и yield являются встроенными ключевыми словами (или операторами) Python. Оператор return используется для возврата значения из функции. При этом он прекращает выполнение программы. А оператор yield создает объект-генератор и может возвращать несколько значений, не прерывая выполнение программы.

Наука
7 млн интересуются