Таким образом, я получаю функции генератора для ленивых вычислений и выражений генератора, также известные как генераторные выражения как его синтаксис c сахарный эквивалент.
Я понимаю такие классы, как
class Itertest1:
def __init__(self):
self.count = 0
self.max_repeats = 100
def __iter__(self):
print("in __inter__()")
return self
def __next__(self):
if self.count >= self.max_repeats:
raise StopIteration
self.count += 1
print(self.count)
return self.count
как способ реализация интерфейса итератора, то есть iter () и next () в одном и том же классе.
Но что тогда является
class Itertest2:
def __init__(self):
self.data = list(range(100))
def __iter__(self):
print("in __inter__()")
for i, dp in enumerate(self.data):
print("idx:", i)
yield dp
, который использует оператор yield в функции-члене iter ?
Также я заметил, что при вызове iter функция-член
it = Itertest2().__iter__()
batch = it.__next__()
оператор print выполняется только при вызове next () в первый раз. Это из-за этой странной смеси урожайности и иттеров? Я думаю, что это довольно противоречиво ...