Рубрики
Без рубрики

Ключевое слово доходности в Python – Простая иллюстрированная гида

Введение Чтобы получить доходность в Python При использовании функции, мы обычно используем ключевое слово возврата, чтобы вернуть значение, вычисляемое функцией. Аналогично, ключевое слово returge также возвращает значение из функции, но также поддерживает состояние локальных переменных внутри функции, и когда функция повторно используется в … Ключевое слово «Доходность в Python» – простое иллюстрированное руководство Подробнее »

Автор оригинала: Shubham Sayon.

Введение в доходность в Python

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

Пример:

def counter():
    x = 1
    while x <= 5:
        yield x
        x += 1

for y in counter():
    print(y)

Выход:

1
2
3
4
5

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

  • Показывать
  • Генераторы

Итак, давайте обсудим Generators и Iterable перед погружением в урожай ключевое слово.

Показывать

ИТЕРИТЕЛЬНО Это объект в Python, из которого мы можем получить итератор. Например, когда создан список, все его элементы могут быть переданы один за другим. Таким образом, чтение элементов списка один за другим известен как итерация, в то время как список является итерацией. В Python, струна, Списки , наборы , кортежи и Словари ИТ-контейнеры, из которых мы можем получить итератор.

Пример:

name = "FINXTER"
li = [1,2,3]
tup = (4,5,6)
s = {"A","B","C"}
d = {"a":100,"b":200,"c":300}

print("\nIterating over String:")
for x in name:
  print(x, end=", ")
print("\nIterating over list:")
for x in li:
  print(x, end=" ")
print("\nIterating over tuple:")
for x in tup:
  print(x, end=" ")
print("\nIterating over set:")
for x in s:
  print(x, end=" ")
print("\nIterating over dictionary:")
for x in d:
  print(d[x], end=" ")

Выход:

Iterating over String:
F, I, N, X, T, E, R, 
Iterating over list:
1 2 3 
Iterating over tuple:
4 5 6 
Iterating over set:
A C B 
Iterating over dictionary:
100 200 300

Итак, мы знаем, что такое итеративный объект. Но что такое итератор?

❖ итератор

Проще говоря, итератор – любой объект, который может быть итерацией. Итераторы реализуются с использованием петлей.

Итераторы реализуют следующие методы, которые известны как Протоколы итератора :

  • __eriter __ (): возвращает объект iTerator.
  • __Next __ () : Позволяет нам выполнять операции и возвращает следующий элемент в последовательности.

Давайте посмотрим на следующую программу, как мы можем повторить итератор в Python с использованием протокола итератора.

Пример: Возвращая итератор из списка (утечка) и печати каждое значение один на один:

li = [1,2,3,4,5]
it = iter(li)

print(next(it))
print(next(it))
print(next(it))
print(next(it))
print(next(it))

Выход:

1
2
3
4
5

Теперь, когда приносит нас к вопросу, в чем разница между итератором и итерацией?

Вот одноклассник, чтобы ответить на то, что:

Каждый Итератор это ИТЕРИТЕЛЬНО , но каждый ИТЕРИТЕЛЬНО не итератор .

Например, список является итеративным, но это не итератор. Мы можем создать итератор из итераточного объекта, используя объект ITERABLE, как показано выше.

❖ Создание объектов итератора

Как упоминалось ранее, __er __ () и __Next __ () Методы должны быть реализованы в объекте/классе, чтобы сделать его итератором.

Пример: Следующая программа демонстрирует создание итератора, который возвращает последовательность чисел, начиная с 100, и каждая итерация увеличит значение на 100.

class IterObj:
  def __iter__(self):
    self.value = 100
    return self

  def __next__(self):
    x = self.value
    self.value += 100
    return x

obj = IterObj()
it = iter(obj)

print(next(it))
print(next(it))
print(next(it))

Выход:

100
200
300

Вышеуказанная программа будет продолжать печатать навсегда, если вы продолжаете использовать Далее () заявления. Должен быть способ остановить итерацию продолжаться навсегда. Это где Заставка заявление вступает в использование.

❖ Запечатление

После того, как итерация выполняется в течение определенного количества раз, мы можем определить условие завершения, которое вызывает ошибку после окончания желаемого количества итераций. Это условие завершения дается Заставка утверждение.

Пример:

class IterObj:
  def __iter__(self):
    self.value = 100
    return self

  def __next__(self):
    if self.value <= 500:
      x = self.value
      self.value += 100
      return x
    else:
      raise StopIteration

obj = IterObj()
it = iter(obj)

for a in it:
  print(a)

Выход:

100
200
300
400
500

Генераторы

При использовании итераторов мы узнали, что нам нужно реализовать __er __ () и __Next __ () Методы и повышения Заставка отслеживать количество итераций. Это может быть довольно длительным, и именно здесь генераторы приходят к нашему спасению. Все процедуры, которые необходимо следовать при использовании итераторов, автоматически обрабатываются генераторами.

Генераторы Простые функции, используемые для создания итераторов и возврата повторного набора элементов, одно значение одновременно.

➡ Вы можете повторить генераторы только один раз. Давайте посмотрим на это в программе.

Пример 1: Используя итератор, чтобы повторить значения дважды.

it = [x for x in range(6)]
print("Iterating over generator")
for i in it:
  print(i, end=", ")
print("\nIterating again!")
for j in it:
  print(j, end=", ")

Выход:

Iterating over generator
0, 1, 2, 3, 4, 5, 
Iterating again!
0, 1, 2, 3, 4, 5,

Пример 2: Использование генератора для случаев повторения ценностей. (Генератор можно использовать только один раз, как показано на выходе.)

gen = (x for x in range(6))
print("Iterating over generator")
for i in gen:
  print(i, end=", ")
print("\nTrying to Iterate over the generator again!")
for j in gen:
  print(j, end=", ")

Выход:

Iterating over generator
0, 1, 2, 3, 4, 5, 
Trying to Iterate over the generator again!

➡ Генераторы не хранят все значения в памяти, вместо этого они генерируют значения на лету. В приведенном выше примере 2 генератор рассчитывает и распечатает значение 0 и забывает его, а затем рассчитывает и печатает 1 и так далее.

Теперь это приводит нас к нашему обсуждению на урожай ключевое слово.

Ключевое слово доходности

Как упоминалось ранее, доходность это ключевое слово, похожее на Возвращение ключевое слово, но в случае доходность Функция возвращает генератор.

Пример: Следующее использует функцию генератора, которая дает 7 случайных целых чисел от 1 до 99.

from random import randint

def game():
    # returns 6 numbers between 1 and 50
    for i in range(6):
        yield randint(1, 50)

    # returns a 7th number between 51 and 99
    yield randint(51,99)

for random_no in game():
       print("Lucky Number : ", (random_no))

Выход:

 Lucky Number :  12
 Lucky Number :  12
 Lucky Number :  47
 Lucky Number :  36
 Lucky Number :  28
 Lucky Number :  25
 Lucky Number :  55

В приведенной выше программе функция генератора Игра () генерирует 6 случайных целых чисел от 1 до 50, выполняя доходность Заявление по одному времени и, наконец, генерирует 7-й случайное число от 51 до 99, выполняя выход выхода вне цикла.

Примечание: Когда функция называется, код внутри функционального тела не работает. Вместо этого корпус функции просто возвращает объект генератора, а затем код будет продолжаться с того места, где он остановился каждый раз для Цикл использует генератор. Сложный!!! Не так ли? 😉

Давайте обсудим рабочий процесс, чтобы сделать вещи немного простыми:

  1. Когда для петли Используется впервые, он вызывает объект генератора, созданный из функции. Он запускает код в функции с самого начала, пока оно не ударяется урожай .
  2. Затем он возвращает первое значение в цикле.
  3. Затем каждый последующий вызов функции запускает другую итерацию петли внутри функции и возвращает следующее значение.
  4. Это продолжается до тех пор, пока генератор не будет пуст, то есть когда функция работает без доходность утверждение. Это происходит, когда петля исчерпана или Если-ж Состояние больше не выполняется.

То, что нужно запомнить:

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

Сравнение времени и оптимизации памяти для функций итератора Против генераторов

Пример 1: Программа, приведенная ниже, вычисляет время использования времени и памяти при использовании функции с помощью итератора.

import time
import random
import os
import psutil


mobile_name = ["iPhone 11", "iPhone XR", "iPhone 11 Pro Max"]
colors = ["red","black","grey"]
def mobile_list(ph):
    phones = []
    for i in range(ph):
      phone = {
        'name': random.choice(mobile_name),
        'color': random.choice(colors)
      }
      colors.append(phone)
    return phones



# Calculate time of processing
t1 = time.time()
cars = mobile_list(1000000)
t2 = time.time()
print('Took {} seconds'.format(t2-t1))

# Calculate Memory used
process = psutil.Process(os.getpid())
print('Memory used: ' + str(process.memory_info().rss/1000000))

выход:

Took 14.238950252532959 seconds
Memory used: 267.157504

Пример 2: Следующая программа использует генератор с оператором выхода вместо функции, а затем вычисляем память и время, используемое в этом случае.

import time
import random
import os
import psutil


mobile_name = ["iPhone 11", "iPhone XR", "iPhone 11 Pro Max"]
colors = ["red","black","grey"]
def mobile_list(ph):
    for i in range(ph):
      phone = {
        'name': random.choice(mobile_name),
        'color': random.choice(colors)
      }
      yield phone


# Calculate time of processing
t1 = time.time()
for car in mobile_list(1000000):
    pass
t2 = time.time()
print('Took {} seconds'.format(t2-t1))

# Calculate Memory used
process = psutil.Process(os.getpid())
print('Memory used: ' + str(process.memory_info().rss/1000000))

Выход:

Took 7.272227048873901 seconds
Memory used: 15.663104

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

Отказ от ответственности: Вы должны Установка PIP Psutil. Так что код работает в вашей машине. Далее возвращаются значения использования времени и памяти, будут варьироваться в зависимости от технических характеристик машины в использовании.

Упражнение

Теперь давайте будем иметь некоторую практику. Запустите код, указанный ниже, чтобы узнать пример в режиме реального времени генераторов и ключевое слово выхода в Python.

Подсказка: В математике числа фибоначчи, обычно обозначаемые Fₙ, образуют последовательность, называемую последовательностью Фибоначчи, так что каждое число – сумма двух предыдущих, начиная от 0 до 1. То есть и для n> 1. (Источник: Википедия )

def fibo(a=0, b=1):
    while True:
        yield a
        a, b = b, a + b

f = fibo()
print(', '.join(str(next(f)) for _ in range(10)))

Вернуть ключевое слово vs white ключевое слово

Прежде чем мы завершаем нашу дискуссию, давайте закончим то, что мы начали и обсудили разницу между урожай и Возвращение заявления в Python.

Заключение

В этой статье мы узнали:

  • Что такое иеристы?
  • Что такое итераторы?
  • Разница между потераслеми и итераторами.
  • Создание объектов итератора.
  • Заставка утверждение.
  • Что такое генераторы в Python?
  • Ключевое слово доходности.
  • Сравнение времени и оптимизации памяти для функций iTerator VS Generators.
  • Разница между Возвращение а также доходность ключевые слова.

Вот небольшое откровение концепций, которые мы узнали в этой статье; Пожалуйста, следуйте за слайд-шоу Дайте ниже:

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

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

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

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Я профессиональный Python Blogger и Content Creator. Я опубликовал многочисленные статьи и создал курсы в течение определенного периода времени. В настоящее время я работаю полный рабочий день, и у меня есть опыт в областях, таких как Python, AWS, DevOps и Networking.

Вы можете связаться со мной @:

Оригинал: “https://blog.finxter.com/yield-keyword-in-python-a-simple-illustrated-guide/”