Функция с yield возвращает Generator и отдаёт значения лениво при итерации, сохраняя состояние между next.
Разбор
- Экономит память на больших последовательностях.
- yield from делегирует другому генератору.
- Генератор одноразовый.
- Можно принимать значения через send.
Пример
function range2($n) { for ($i=0;$i<$n;$i++) yield $i; }
Итог
Генераторы — ленивые последовательности без полной материализации.