yield
— это ключевое слово в языке Python, используемое для создания генераторов.
Генераторы — это функции, которые могут возвращать несколько значений в течение времени выполнения, в отличие от обычных функций, которые возвращают только одно значение и прекращают свое выполнение после того, как оно достигнуто.
В этой статье мы рассмотрим, как использоватьyield
в Python и как он работает.
Генераторы создаются с помощью ключевого слова yield
. Это ключевое слово используется вместо return
для возврата значения. Однако, в отличие от return
, yield
не завершает выполнение функции, а сохраняет состояние выполнения функции, чтобы она могла продолжать работать снова с того же места, где она была приостановлена.
Рассмотрим простой пример работы yield
в Python. Генератор, который возвращает последовательность чисел:
def generate_numbers(n):
for i in range(n):
yield i
В этом примере функция generate_numbers()
превращается в генератор, который производит числа от 0 до n-1
. Каждый раз, когда генератор вызывается, он возвращает следующее значение из последовательности с помощью ключевого слова yield
.
Вот как можно использовать этот генератор:
for num in generate_numbers(5):
print(num)
Этот код напечатает:
0
1
2
3
4
1) Генерация чисел Фибоначчи
def fibonacci_sequence(n):
a, b = 0, 1
for i in range(n):
yield a
a, b = b, a + b
for num in fibonacci_sequence(10):
print(num)
#0
#1
#1
#2
#3
#5
#8
#13
#21
#34
В этом примере функция fibonacci_sequence()
определяет генератор, который генерирует последовательность чисел Фибоначчи до n
. Каждый раз, когда вызывается yield
, функция приостанавливает свою работу и возвращает значение. Этот генератор можно использовать в цикле for
, чтобы распечатать числа в последовательности.
def filter_list(lst):
for item in lst:
if item % 2 == 0:
yield item
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter_list(numbers))
print(even_numbers)
#[2, 4, 6, 8, 10]
Здесь функция filter_list()
является генератором четных элементов списка. При каждом вызове yield
, функция приостанавливает свою работу и возвращает значение. Этот генератор можно использовать для создания нового списка, содержащего только четные числа из оригинального списка.
def string_generator(text):
for word in text.split():
yield word
text = "Python is a high-level programming language"
for word in string_generator(text):
print(word)
#Python
#is
#a
#high-level
#programming
#language
Этот код создает генератор, который разбивает входной текст на слова и возвращает их по одному. Функция string_generator
использует yield
для возврата каждого слова в тексте.
import random
def random_numbers(count):
for i in range(count):
yield random.randint(1, 10)
for num in random_numbers(5):
print(num)
#6
#1
#9
#1
#2
В этом примере мы создали генератор случайных чисел от 1 до 10. Функция random_numbers
использует yield
для возврата случайного числа каждый раз, когда она вызывается.
Использование генераторов имеет несколько преимуществ:
Содержание: