Без yield from можно явно перебрать вложенную коллекцию циклом и выдавать элементы через yield. Для собственного итератора в Python 2 использовали next, а в Python 3 — next.
Как реализовать обход пользовательской коллекции в стиле Python 2, без yield from?
Без yield from можно явно перебрать вложенную коллекцию циклом и выдавать элементы через yield. Для собственного итератора в Python 2 использовали next, а в Python 3 — __next__.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Без yield from можно явно перебрать вложенную коллекцию циклом и выдавать элементы через yield. Для собственного итератора в Python 2 использовали next, а в Python 3 — next.
class Collection:
def __init__(self, items):
self.items = items
def __iter__(self):
for item in self.items:
yield item
Такой простой генераторный обход работает без делегирования yield from. Если нужна именно поддержка legacy Python 2, учитывайте различия протокола и прекращённую поддержку языка; новый код лучше писать для поддерживаемой версии.