0Pricing
Python Academy · Урок

Генераторы

Разберитесь в генераторах и их применении для создания итераторов

«Генераторы» — бесплатный урок Python Academy на CoddyKit. Это урок 2 из 5. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 5 уроков всего.

Введение в генераторы

Введение в генераторы

Генераторы — это особый тип итераторов в Python, который позволяет перебирать данные по мере необходимости. Вместо возврата всех данных сразу они выдают по одному элементу за раз, поэтому экономно используют память.

В этом уроке вы узнаете, как создавать и использовать генераторы в Python.

Генераторы — иллюстрация 1

Что такое генератор

Что такое генератор

Генератор — это функция, которая использует ключевое слово yield, чтобы возвращать значения по одному. Каждый вызов метода next() генератора возобновляет выполнение с места, где в последний раз было выдано значение.

# Basic generator example
def my_generator():
    yield 1
    yield 2
    yield 3

# Using the generator
gen = my_generator()
print(next(gen))  # Outputs: 1
print(next(gen))  # Outputs: 2
print(next(gen))  # Outputs: 3

Как работают генераторы

Как работают генераторы

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

# Example: Generating a range of numbers
def range_generator(start, end):
    while start < end:
        yield start
        start += 1

for number in range_generator(1, 5):
    print(number)  # Outputs: 1, 2, 3, 4

Выражения-генераторы

Выражения-генераторы

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

# Generator expression
gen_exp = (x * x for x in range(5))

for value in gen_exp:
    print(value)  # Outputs: 0, 1, 4, 9, 16

Генераторы и списки

Генераторы и списки

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

# Comparing lists and generators
# List comprehension
list_comp = [x * x for x in range(1000000)]

# Generator expression
gen_exp = (x * x for x in range(1000000))

# List comprehension uses more memory
print(type(list_comp))  # Outputs: <class 'list'>
print(type(gen_exp))    # Outputs: <class 'generator'>

Случаи использования генераторов

Случаи использования генераторов

Генераторы идеально подходят для:

  • Обработки больших наборов данных, которые не помещаются в памяти.
  • Создания бесконечных последовательностей.
  • Отложенного вычисления данных.

Бесконечные генераторы

Бесконечные генераторы

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

# Infinite generator example
def infinite_sequence():
    num = 0
    while True:
        yield num
        num += 1

# Using the infinite generator
for i in infinite_sequence():
    if i > 5:
        break
    print(i)  # Outputs: 0, 1, 2, 3, 4, 5

Функции-генераторы с несколькими выдачами значений

Функции-генераторы с несколькими выдачами значений

Функции-генераторы могут содержать несколько операторов yield, что позволяет создавать сложные последовательности:

# Multiple yields in a generator
def multi_yield():
    yield "First"
    yield "Second"
    yield "Third"

for value in multi_yield():
    print(value)  # Outputs: First, Second, Third

Распространённые ошибки при работе с генераторами

Распространённые ошибки при работе с генераторами

Вот некоторые ошибки, которых следует избегать:

  • Использование return вместо yield в функции-генераторе.
  • Неперебирание генератора с помощью цикла или next().
  • Использование генераторов для небольших наборов данных, для которых больше подходят списки.

Что мы узнали

Что мы узнали

В этом уроке вы узнали:

  • Что такое генераторы и как они работают в Python.
  • Как использовать yield для создания функций-генераторов.
  • Чем генераторы отличаются от списков.
  • О случаях использования генераторов, например для бесконечных последовательностей и больших наборов данных.

Отлично! Перейдём к следующей теме.

Генераторы — иллюстрация 11

Часто задаваемые вопросы

Урок «Генераторы» бесплатный?

Да — полный текст урока «Генераторы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 5 уроков всего.

Чему я научусь в уроке «Генераторы»?

Разберитесь в генераторах и их применении для создания итераторов Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Python Academy?

Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 5.

Сколько времени занимает урок «Генераторы»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Python Academy?

Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Декораторы
  2. Генераторы
  3. Менеджеры контекста (операторы with)
  4. Генераторы списков, множеств и словарей
  5. Итераторы и итерируемые объекты
← Назад к Python Academy