Может кто нибудь объяснить простым языком что такое генераторы и итераторы, например в php и чем отличается return от yield?
return возвращает значение и прекращает работу функции.
yield возвращает значение и переходит к началу цикла, работает дальше до тех пор, пока все значения не закончатся или пока приниматель значений не скажет "хватит!"
Дополню.
Итератор - по простому это объект (или другие контрукции), которые можно прогонять в цикле. Точнее Итератор - это интерфейс для этого, а вот то что можно прогнать в цикле - это итерируемый объект.
Массив - пример итерируемой структуры языка. Коллекция - это итерируемый объект.
Генератор - это тоже итератор, но только с другой структурой. Он позволяет остановиться на том моменте, где был прошлый цикл. Лучше почитать документацию, как это работает.
В целом генератор итератором. А итератор (итерируемый объект, только объект не смысле ООП, а в смысле простого указания) - это все, что можно использовать в цикле.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей