Wie kann man jeweils einen Wert von einer Generatorfunktion in Python abrufen?


113

Sehr grundlegende Frage - wie erhält man einen Wert von einem Generator in Python?

Bisher habe ich festgestellt, dass ich eine durch Schreiben bekommen kann gen.next(). Ich möchte nur sicherstellen, dass dies der richtige Weg ist.

Antworten:



66

Verwenden Sie in Python <= 2.5 gen.next(). Dies funktioniert für alle Python 2.x-Versionen, jedoch nicht für Python 3.x.

Verwenden Sie in Python> = 2.6 next(gen). Dies ist eine eingebaute Funktion und klarer. Es wird auch in Python 3 funktionieren.

Beide rufen am Ende eine speziell benannte Funktion auf next(), die durch Unterklassen überschrieben werden kann. In Python 3 wurde diese Funktion jedoch umbenannt __next__(), um mit anderen Sonderfunktionen übereinzustimmen.


16

Verwenden Sie (für Python 3)

next(generator)

Hier ist ein Beispiel

def fun(x):
    n = 0
    while n < x:
        yield n
        n += 1
z = fun(10)
next(z)
next(z)

sollte drucken

0
1


2

Um den Wert zu erhalten, der einem Generatorobjekt in Python 3 und höher zugeordnet ist, verwenden Sie next(<your generator object>). Nachfolgende Aufrufe von next () erzeugen aufeinanderfolgende Objektwerte in der Warteschlange.


1

In Python 3 haben Sie nicht gen.next(), aber Sie können immer noch verwenden next(gen). Ein bisschen bizarr, wenn du mich fragst, aber so ist es.


1
Es ist nicht so seltsam. Python 3 soll Dinge kaputt machen und nur den klareren, besseren Code zulassen. Die mangelnde Abwärtskompatibilität ist der Grund für einige wichtige Änderungen.
Tatarize
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.