keyboard
В этой статье мы расскажем про основные различия между yield и return в Python. А для лучшего понимания этих различий приведем пару примеров.
Встроенное ключевое слово yield используется для создания функций-генераторов. (Про генераторы и их отличия от функций и списков можно подробнее прочитать здесь).
Функция, содержащая yield, может генерировать сразу несколько результатов. Она приостанавливает выполнение программы, отправляет значение результата вызывающей стороне и возобновляет выполнение с последнего yield. Кроме того, функция, содержащая yield, отправляет сгенерированную серию результатов в виде объекта-генератора.
Return также является встроенным ключевым словом в Python. Он завершает функцию, а вызывающей стороне отправляет значение.
Начнем с того, что между yield и return есть много заметных различий. Для начала давайте обсудим их.
| return | yield |
|---|---|
| Оператор return возвращает только одно значение. | Оператор yield может возвращать серию результатов в виде объекта-генератора. |
| Return выходит из функции, а в случае цикла он закрывает цикл. Это последний оператор, который нужно разместить внутри функции. | Не уничтожает локальные переменные функции. Выполнение программы приостанавливается, значение отправляется вызывающей стороне, после чего выполнение программы продолжается с последнего оператора yield. |
| Логически, функция должна иметь только один return. | Внутри функции может быть более одного оператора yield. |
| Оператор return может выполняться только один раз. | Оператор yield может выполняться несколько раз. |
| Return помещается внутри обычной функции Python. | Оператор yield преобразует обычную функцию в функцию-генератор. |
Теперь давайте рассмотрим разницу между операторами return и yield на примерах.
В приведенном ниже коде мы использовали несколько операторов возврата. Вы можете заметить, что выполнение программы прекратится уже после первого оператора return. Весь код, идущий после, не будет выполнен.
num1 =10
num2=20
def mathOP():
return num1+num2
return num1-num2
return num1*num2
return num1/num2
print(mathOP()) В выводе видно, что функция возвращает только первое значение, после чего программа завершается.
Чтобы выполнить аналогичную задачу с несколькими операторами 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()) Запустив данный код, получим следующий результат:
Однако мы можем выполнить эти арифметические операции внутри одной функции-генератора, используя несколько операторов 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) Получим результат:
Давайте рассмотрим еще один пример использования операторов 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, и завершает выполнение функции.
Теперь давайте реализуем тот же пример, используя оператор 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) Получим следующий результат:
В этой статье мы провели сравнение yield и return в Python, перечислили все заметные различия между ними и разобрали это на примерах.
Давайте подытожим.
И return, и yield являются встроенными ключевыми словами (или операторами) Python. Оператор return используется для возврата значения из функции. При этом он прекращает выполнение программы. А оператор yield создает объект-генератор и может возвращать несколько значений, не прерывая выполнение программы.
Если вы ищете работу на Python, на Talanto.work сейчас есть варианты для junior, middle, senior…
Рынок Python-вакансий большой, но удобным его назвать сложно. Формально вакансий много, однако в реальном поиске…
Срезы в Python — это больше, чем a[2:7]. В статье — быстрый разбор полезных приёмов:…
В этой статье мы рассмотрим возведение в степень в Python с помощью различных методов, от…
Дубликаты в списке Python — частая проблема. В статье показано, как быстро убрать повторы, в…
Услуга виртуального хостинга на SpaceWeb позволяет арендовать часть сервера (shared-сервера) и разместить на нём свой…