Что делает ключевое слово yield в Python?
Если компилятор определяет ключевое слово yield внутри функции, эта функция больше не возвращается через оператор return. Вместо этого он немедленно возвращает ленивый объект ожидающего списка, называемый генератором. Генератор истребитель. iterable - это что-то вроде списка или набора или диапазона или dict-view со встроенным протоколом для посещения каждого элемента в определенном порядке.
Таким образом, функция с «выходом» больше не является нормальной функцией, а становится генератором. Каждый раз, когда код выполняется для «yield», он возвращает правую часть «yield», а затем продолжает цикл кода.
def makeSqure(n): i = 1 while i < n: yield i * i i += 1 print(list(makeSqure(5)))
Выход
[1, 4, 9, 16]
В приведенном выше примере оператор «yield» приостанавливает выполнение функции и отправляет значение обратно вызывающей стороне на каждой итерации, но сохраняет достаточно состояния, чтобы функция возобновлялась там, где она была остановлена. При возобновлении функция продолжает выполнение сразу после последнего прогона выхода.