Пример ответа
Коротко: Генератор в 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, приостанавливая выполнение и сохраняя состояние для последующих вызовов.
- Как вы используете генераторы в реальных проектах? — Я применяю их для обработки больших потоков данных, таких как чтение файлов построчно или генерация последовательностей в веб-приложениях, чтобы снизить потребление памяти.
Практический совет (на неделю):
- Используйте генераторы для обработки больших наборов данных, чтобы избежать переполнения памяти, особенно в бэкенд-приложениях.
- Экспериментируйте с генераторными выражениями (например, (x**2 for x in range(10))) для создания компактных итераторов на лету.
Python Backend
Общий
29%
Следующий: Какие у тебя есть вопросы
Предыдущий: Какие у тебя зарплатные ожидания