Что такое генератор в Python · Python Backend — JobPilot

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

Python Backend · 29%
Вопрос 2467 / #
Пример ответа

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

Ключевые идеи:
  • Генераторы используют yield для приостановки выполнения и возврата значения, сохраняя состояние между вызовами.
  • Они эффективны по памяти, так как генерируют элементы на лету, а не хранят всю последовательность в памяти.
  • Генераторы реализуют протокол итератора, что позволяет использовать их в циклах for и других контекстах, ожидающих итерируемые объекты.
Пример: Например, генератор для бесконечной последовательности чисел: def infinite_numbers(): n = 0; while True: yield n; n += 1. При вызове next() он будет возвращать 0, 1, 2 и так далее, не занимая бесконечную память.
Пример генератора, который генерирует квадраты чисел до заданного предела
python
def square_generator(limit):
    for i in range(limit):
        yield i ** 2

# Использование генератора
squares = square_generator(5)
for sq in squares:
    print(sq)  # Выводит: 0, 1, 4, 9, 16

# Или с помощью next()
gen = square_generator(3)
print(next(gen))  # 0
print(next(gen))  # 1
print(next(gen))  # 4
Вопросы для интервьюера:
  • В чём разница между генераторами и обычными функциями?Обычные функции используют return и завершают выполнение, возвращая значение, а генераторы используют yield, приостанавливая выполнение и сохраняя состояние для последующих вызовов.
  • Как вы используете генераторы в реальных проектах?Я применяю их для обработки больших потоков данных, таких как чтение файлов построчно или генерация последовательностей в веб-приложениях, чтобы снизить потребление памяти.
Практический совет (на неделю):
  1. Используйте генераторы для обработки больших наборов данных, чтобы избежать переполнения памяти, особенно в бэкенд-приложениях.
  2. Экспериментируйте с генераторными выражениями (например, (x**2 for x in range(10))) для создания компактных итераторов на лету.
Python Backend
Общий
29%
Навигация
Какие у тебя зарплатные ожидания
Следующий: Какие у тебя есть вопросы
Предыдущий: Какие у тебя зарплатные ожидания

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