ich ein Dummy Beispiel eines Iterators Behälter haben unten (der echte liest eine Datei zu groß in den Speicher zu passen):Wie überprüfe ich, ob ein Iterator tatsächlich ein Iterator-Container ist?
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
Dies ermöglicht es mir über den Wert mehr als einmal, so dass ich iterieren so etwas wie dies umsetzen kann:
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))
Wie prüfe ich in der normalisieren-Funktion, die ich als ein normaler Generator einen Iterator Behälter eher weitergegeben bin zu werden?
Sie müssen die Datei in den Speicher so auf einmal nicht lesen, warum diese brauchen? –
Was Padraic gesagt hat. Wenn Sie mehrere Pässe über eine große Datei ausführen müssen, verwenden Sie einfach ihre '.seek()' - Methode, um sie zurückzuspulen. –
Können Sie Ihren Code so bearbeiten, dass er lauffähig ist? Füge 'self' Parameter zu' __init__' hinzu und benutze 'self.max_value' in' __iter__' –