- Выражения-генераторы:
- Создают итератор “на лету”, не храня все значения в памяти.
- Синтаксис:
(выражение for элемент in итерируемый_объект [if условие])
(круглые скобки!). - Пример:
squares_generator = (i**2 for i in range(1000))
- Итератор vs Итерируемый объект:
- Итерируемый объект (
Iterable
): Объект, который можно перебирать (например, список, строка, кортеж, словарь, множество, файл). Имеет метод__iter__()
, который возвращает итератор. - Итератор (
Iterator
): Объект, который представляет поток данных. Имеет метод__next__()
, возвращающий следующий элемент или вызывающийStopIteration
, когда элементы кончились. Итератор помнит свое текущее состояние.
- Итерируемый объект (
- Генератор: Особый тип итератора, создаваемый выражениями-генераторами или функциями-генераторами. Элементы генерируются по запросу и могут быть перебраны только один раз.
- Функция
iter()
:- Принимает итерируемый объект и возвращает итератор для него.
- Пример:
s = [1, 2, 3] my_iter = iter(s) print(next(my_iter)) # Вывод: 1 print(next(my_iter)) # Вывод: 2 print(next(my_iter)) # Вывод: 3 # print(next(my_iter)) # Вызовет StopIteration
- Функции-генераторы:
- Функции, содержащие ключевое слово
yield
. - При вызове возвращают объект-генератор (итератор).
yield
возвращает значение и “замораживает” выполнение функции, сохраняя ее состояние. При следующем вызовеnext()
для генератора выполнение возобновляется со строки послеyield
.- Пример:
def simple_generator(): print("Начало генератора") yield 1 print("После первого yield") yield 2 print("После второго yield") yield 3 print("Конец генератора") gen = simple_generator() print(next(gen)) # Вывод: Начало генератора \n 1 print(next(gen)) # Вывод: После первого yield \n 2
- Функции, содержащие ключевое слово
〰〰〰 𓆝 𓆟 𓆞 𓆝 𓆟 𓆝 𓆟 𓆞 〰〰〰