Автор оригинала: 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: Программа, приведенная ниже, вычисляет время использования времени и памяти при использовании функции с помощью итератора.
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/”