문제
파이썬의 반복자는 우리가 자주 사용하는 반복적 인 도구입니다,하지만 소비자되면, 소비자는 다시 StopIteration을 오류가 나타납니다.
솔루션
- 다시 초기화 한 후 클래스, 반복자를 캡슐화합니다.
코드
class RepeatDataLoader():
def __init__(self):
self.data_iter = self.data_loader()
self.renew_epoch = False
def __next__(self):
try:
batch = self.data_iter.__next__()
self.renew_epoch = False
except StopIteration:
self.data_iter = self.data_loader()
batch = self.data_iter.__next__()
self.renew_epoch = True
return batch
@staticmethod
def data_loader():
for i in range(5):
yield i
def checkIter(myIter):
for _ in range(15):
a = next(myIter)
print (a)
if __name__ == "__main__":
oneIter = RepeatDataLoader.data_loader()
repeatIter = RepeatDataLoader()
checkIter(repeatIter)