Bestimmen der Leerheit eines Generators
In Python sind Generatoren ein leistungsstarkes Werkzeug für die verzögerte Auswertung und Iteration über große Datensätze. Allerdings stellt die Feststellung, ob ein Generator leer ist, aufgrund seiner dynamischen Natur eine besondere Herausforderung dar. Im Gegensatz zu Listen oder Tupeln haben Generatoren kein Größenattribut und eine einfache Iteration über sie würde zu einer StopIteration-Ausnahme führen.
Peek vs. HasNext
Einige schlagen das vielleicht vor Verwenden der Funktion peek(), um zu überprüfen, ob ein Generator Elemente enthält. Mit peek() können Sie zwar das erste Element eines Generators abrufen, ohne es zu verbrauchen, es bietet jedoch keine Möglichkeit, festzustellen, ob der Generator leer ist. Dies liegt daran, dass peek() eine StopIteration-Ausnahme auslöst, wenn der Generator leer ist, die nicht von der Ausnahme zu unterscheiden ist, die ausgelöst würde, wenn versucht würde, über einen leeren Generator zu iterieren.
Ähnlich verhält es sich üblicherweise mit der Funktion hasNext() in Java gefunden, ist in Python-Generatoren nicht verfügbar.
Von Anfang an auf Leere prüfen
Um festzustellen, ob ein Generator von Anfang an leer ist, können Sie a verwenden Benutzerdefinierte Funktion wie die in der Antwort bereitgestellte:
<code class="python">def peek(iterable): try: first = next(iterable) except StopIteration: return None return first, itertools.chain([first], iterable)</code>
Diese Funktion ruft das erste Element des Generators ab und gibt None zurück, wenn der Generator leer ist. Außerdem bleibt der Status des Generators erhalten, indem eine modifizierte Version zurückgegeben wird, die das erste Element enthält.
Verwendung
Um diese Funktion zu verwenden, können Sie sie mit dem Generator als aufrufen Argument:
<code class="python">res = peek(mysequence) if res is None: # sequence is empty. Do stuff. else: first, mysequence = res # Do something with first, maybe? # Then iterate over the sequence: for element in mysequence: # etc.</code>
Mit dieser Prüfung können Sie feststellen, ob der Generator leer ist, und den leeren Fall entsprechend behandeln, bevor Sie darüber iterieren.
Das obige ist der detaillierte Inhalt vonSo ermitteln Sie in Python, ob ein Generator leer ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!