mam manekina przykład pojemnika iteratora poniżej (prawdziwa odczytuje plik zbyt duży, aby zmieścić się w pamięci):Jak sprawdzić, czy iterator jest w rzeczywistości kontenerem iteracyjnym?
class DummyIterator:
def __init__(self, max_value):
self.max_value = max_value
def __iter__(self):
for i in range(self.max_value):
yield i
def regular_dummy_iterator(max_value):
for i in range(max_value):
yield i
To pozwala mi iteracyjne nad wartością więcej niż raz abym można zaimplementować coś takiego:
def normalise(data):
total = sum(i for i in data)
for val in data:
yield val/total
# this works when I call next()
normalise(DummyIterator(100))
# this doesn't work when I call next()
normalise(regular_dummy_iterator(100))
Jak mogę sprawdzić w funkcji normalizować, że mam być przekazany pojemnik iteracyjnej zamiast zwykłego generatora?
Nie musisz od razu czytać pliku w pamięci, więc dlaczego tego potrzebujesz? –
Co Padraic powiedział. Jeśli chcesz wykonać wiele przebiegów przez duży plik, po prostu użyj jego metody '.seek()' do przewinięcia. –
Czy możesz edytować swój kod, aby działał? Dodaj parametr 'self' do' __init__' i użyj 'self.max_value' do' __iter__' –