Найти - Пользователи
Полная версия: Как выглядит генератор внутри?
Начало » Python для новичков » Как выглядит генератор внутри?
1
zlodiak
Извиняюсь за дикий вопрос, но мне кажется, что я не понимаю какую-то фундаментальную вещь.

Вот так выглядит итератор внутри:

#!/usr/bin/env python3

class Obj():
def __init__(self, word):
self.word = word

def __iter__(self):
return Iterator(self.word)

class Iterator:
def __init__(self, word):
self.word = word
self.index = 0

def __next__(self):
try:
letter = self.word
self.index += 1
return letter
except IndexError:
raise StopIteration()

def __iter__(self):
return self


obj = Obj('sergey')
it = iter(obj)

print(next(it))
print(next(it))
print(next(it))
print(next(it))
print(next(it))
print(next(it))


Можно в итерируемом объекте итератор заменить генератором так:

class Obj():
def __init__(self, word):
self.word = word

def __iter__(self):
for l in self.word:
yield l

obj = Obj('sergey')
it = iter(obj)

print(next(it))
print(next(it))
print(next(it))
print(next(it))


Получается, что генератор тоже реализует интерфейс итератора. То есть имеет методы __next__() и __iter__()

Проблема в том, что я не понимаю как генератор выглядит на низком уровне. Я вижу только:

for l in self.word:
yield l

и в этом куске кода нет метода __next__(). Помогите пожалуйста представить генератор в низкоуровневом виде(первый код, который я привёл я называю низкоуровневым. нужно что-то подобное).
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB