Доходность в учебнике Python: Generator Пример доходности и доходности

Что такое выход Python?

Ключевое слово выход в Python работает как возврат с единственным

разница в том, что вместо возврата значения он возвращает generator возражать звонящему.

Когда вызывается функция и поток выполнения находит ключевое слово доходности в функции, выполнение функции останавливается на этой строке и возвращает generator объект обратно вызывающему абоненту.

Синтаксис

yield expression

Описание

Выход Python возвращает generator объект. Generators — это специальные функции, которые необходимо повторять для получения значений.

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

Пример: метод доходности

Вот простой пример доходности. Функция testyield() имеет ключевое слово доходности со строкой «Добро пожаловать в Guru99». Учебники по Python«. Когда функция вызывается, выходные данные распечатываются и выдают generator объект вместо фактического значения.

def testyield():
  yield "Welcome to Guru99 Python Tutorials"
output = testyield()
print(output)

Вывод:

<generator object testyield at 0x00000028265EB9A8>

Результатом является generator объект, который имеет значение, которое мы дали для доходности.

Но мы не получаем сообщения, которое должны дать, чтобы получить результат!

Чтобы напечатать сообщение, переданное в методе доходности, придется выполнить итерацию generator объект, как показано в примере ниже:

def testyield():
  yield "Welcome to Guru99 Python Tutorials"

output = testyield()
for i in output:
    print(i)

Вывод:

Welcome to Guru99 Python Tutorials

Каковы Generatorв питоне?

Generators — это функции, которые возвращают итерируемый generator объект. Значения из generator объекты извлекаются по одному, а не весь список вместе, и, следовательно, для получения фактических значений вы можете использовать цикл for, используя метод next() или list().

. Generator функция

Вы можете создать generatorс помощью generator функция и использование generator выражение.

A generator Функция похожа на обычную функцию: вместо возвращаемого значения она будет иметь ключевое слово доходность.

Чтобы создать generator вам нужно будет добавить ключевое слово доходности. Следующееwing примеры показывают, как создать generator функции.

def generator():
    yield "H"
    yield "E"
    yield "L"
    yield "L"
    yield "O"

test = generator()
for i in test:
    print(i)

Вывод:

H
E
L
L
O

Разница между нормальной функцией и/с Generator функции.

Давайте поймем, как generator функция отличается от обычной функции.

Есть 2 функцииnormal_test() и generator_тест().

Предполагается, что обе функции возвращают строку «Hello World». Normal_test() использует возврат и generator_test() использует выход.

# Normal function
def normal_test():
    return "Hello World"
	
#Generator function
def generator_test():
	yield "Hello World"
print(normal_test()) #call to normal function
print(generator_test()) # call to generator function

Вывод:

Hello World
<generator object generator_test at 0x00000012F2F5BA20>

Вывод показывает, что когда вы вызываете обычную функциюnormal_test(), она возвращает строку Hello World. Для generator функция с ключевым словом доходности, которую она возвращаетgenerator объект generator_test по адресу 0x00000012F2F5BA20>, а не строка.

В этом состоит главное отличие между generator функция и нормальная функция. Теперь, чтобы получить значение из generator объект, нам нужно либо использовать объект внутри цикла for, либо использовать метод next(), либо использовать list().

print(next(generator_test()))  # will output Hello World

Еще одно отличие, которое можно добавить к обычной функции v/s. generator заключается в том, что когда вы вызываете обычную функцию, ее выполнение начинается и останавливается, когда она достигает возвращают и значение возвращается вызывающему абоненту. Поэтому, когда начинается выполнение, вы не можете остановить обычную функцию между ними, и она остановится только тогда, когда встретит ключевое слово return.

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

Как прочитать значения из generator?

Вы можете прочитать значения из generator объект, используя list(), цикл for и метод next().

Использование: список()

Список — это итерируемый объект, внутри которого есть элементы. brackets.Использование list() в generator объект выдаст все значения, generator держит.

def even_numbers(n):
    for x in range(n):
       if (x%2==0): 
           yield x       
num = even_numbers(10)
print(list(num))

Вывод:

[0, 2, 4, 6, 8]

Использование: for-in

В этом примере определена функция Even_numbers(), которая выдаст вам все четные числа для определенного n. Вызов функции Even_numbers() вернет generator объект, который используется внутри цикла for.

Это критически важно для анализа и выбора наиболее эффективных ключевых слов для улучшения рейтинга вашего сайта.

def even_numbers(n):
    for x in range(n):
       if (x%2==0): 
           yield x       
num = even_numbers(10)
for i in num:
    print(i)

Вывод:

0
2
4
6
8

Использование следующего()

Метод next() предоставит вам следующий элемент в списке, массиве или объекте. Как только список станет пустым, и если будет вызвана функция next(), она вернет ошибку с сигналом stopIteration. Эта ошибка из next() указывает на то, что в списке больше нет элементов.

def even_numbers(n):
    for x in range(n):
       if (x%2==0): 
           yield x       
num = even_numbers(10)
print(next(num))
print(next(num))
print(next(num))
print(next(num))
print(next(num))
print(next(num))

Вывод:

0
2
4
6
8
Traceback (most recent call last):
  File "main.py", line 11, in <module>
    print(next(num))
StopIteration

Generatorявляются одноразовыми.

В случае generators они доступны для использования только один раз. Если вы попытаетесь использовать их еще раз, они будут пусты.

Например:

def even_numbers(n):
    for x in range(n):
       if (x%2==0): 
           yield x       
num = even_numbers(10)
for i in num:
    print(i)

print("\n")
print("Calling the generator again: ", list(num))

Вывод:

0
2
4
6
8
Calling the generator again:  []

Если вы хотите, чтобы выходные данные использовались снова, вам придется снова вызвать функцию.

Пример: Generators и доходность для ряда Фибоначчи

Фоллоwing пример показывает, как использовать generators и выход в Python. В примере будет сгенерирован ряд Фибоначчи.

def getFibonnaciSeries(num):
    c1, c2 = 0, 1
    count = 0
    while count < num:
        yield c1
        c3 = c1 + c2
        c1 = c2
        c2 = c3
        count += 1
fin = getFibonnaciSeries(7)
print(fin)
for i in fin:
    print(i)

Вывод:

<generator object getFibonnaciSeries at 0x0000007F39C8BA20>
0
1
1
2
3
5
8

Пример: вызов функции с Yield

В этом примере мы увидим, как вызвать функцию с выходом.

В приведенном ниже примере есть функция test(), которая возвращает квадрат заданного числа. Существует еще одна функция getSquare(), которая использует test() с ключевым словом yield. Вывод дает квадратное значение для заданного диапазона чисел.

def test(n):
    return n*n

def getSquare(n):
    for i in range(n):
        yield test(i)

sq = getSquare(10)
for i in sq:
    print(i)

Вывод:

0
1
4
9
16
25
36
49
64
81

Когда использовать Yield вместо Return в Python

Python3 Доходность Ключевое слово возвращает generator вызывающему абоненту, и выполнение кода начинается только тогда, когда generator повторяется.

A возвращают в функции — это конец выполнения функции, и вызывающей стороне возвращается одно значение.

Вот ситуация, когда вам следует использовать Yield вместо Return.

  • Используйте выход вместо возврата, когда размер данных большой
  • Yield — лучший выбор, когда вам нужно, чтобы ваше выполнение было быстрее на больших наборах данных.
  • Используйте выход, если вы хотите вернуть большой набор значений вызывающей функции.
  • Yield — это эффективный способ создания больших или бесконечных данных.

Доходность против доходности

Вот различия между доходностью и доходностью.

Уступать ВОЗВРАТ
Доходность возвращает generator объект вызывающему объекту, и выполнение кода начинается только тогда, когда generator повторяется. Возврат в функции — это конец выполнения функции, и вызывающей стороне возвращается одно значение.
Когда функция вызывается и встречает ключевое слово доходность, выполнение функции останавливается. Он возвращает generator объект обратно вызывающему абоненту. Выполнение функции начнется только тогда, когда generator объект выполняется. Когда функция вызывается, начинается ее выполнение, и значение возвращается вызывающей стороне, если есть ключевое слово return. Возврат внутри функции отмечает конец выполнения функции.
выражение yield возвращаемое выражение
При использовании ключевого слова yield память не используется. Память выделяется для возвращаемого значения.
Очень полезно, если вам приходится иметь дело с огромным объемом данных, поскольку память не используется. Удобно для очень небольшого размера данных.
Производительность выше, если ключевое слово доходность используется для больших размеров данных. Если размер данных огромен, используется много памяти, что снижает производительность.
Время выполнения сокращается в случае выхода за большой размер данных. Используемое время выполнения больше, поскольку выполняется дополнительная обработка: в случае, если размер ваших данных огромен, он будет работать нормально для небольшого размера данных.

Итоги

  • Ключевое слово выход в Python работает как возврат с той лишь разницей, что вместо возврата значения оно возвращает generator функцию вызывающему абоненту.
  • A generator — это особый тип итератора, который после использования больше не будет доступен. Значения не сохраняются в памяти и доступны только при вызове.
  • Ценности из generator можно прочитать с помощью методов for-in, list() и next().
  • Основное различие между доходностью и доходностью заключается в том, что доходность возвращает generator функция для вызывающего объекта, а return дает одно значение вызывающему объекту.
  • Yield не сохраняет никакие значения в памяти, и его преимущество состоит в том, что он полезен, когда размер данных велик, поскольку ни одно из значений не сохраняется в памяти.
  • Производительность выше, если используется ключевое слово доходность по сравнению с возвратом для большого размера данных.