Jak uzyskać jedną wartość naraz z funkcji generatora w Pythonie?


113

Bardzo podstawowe pytanie - jak uzyskać jedną wartość z generatora w Pythonie?

Jak dotąd stwierdziłem, że mogę go zdobyć, pisząc gen.next(). Chcę się tylko upewnić, że to właściwy sposób?

Odpowiedzi:



66

W Pythonie <= 2.5 użyj gen.next(). Będzie to działać dla wszystkich wersji Pythona 2.x, ale nie dla Pythona 3.x

W Pythonie> = 2.6 użyj next(gen). Jest to wbudowana funkcja i jest jaśniejsza. Będzie również działać w Pythonie 3.

Oba kończą się wywołaniem specjalnie nazwanej funkcji next(), którą można przesłonić przez podklasę. Jednak w Pythonie 3 nazwa tej funkcji została zmieniona na __next__(), aby była spójna z innymi funkcjami specjalnymi.


16

Użyj (dla Pythona 3)

next(generator)

Oto przykład

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

powinien drukować

0
1


2

Aby uzyskać wartość skojarzoną z obiektem generatora w Pythonie 3 i nowszych, użyj next(<your generator object>). kolejne wywołania next () generują kolejne wartości obiektów w kolejce.


1

W Pythonie 3 nie masz gen.next(), ale nadal możesz używać next(gen). Trochę dziwne, jeśli mnie zapytasz, ale tak to jest.


1
To nie jest takie dziwne. Python 3 ma zepsuć rzeczy i pozwolić tylko na jaśniejszy, lepszy kod. Brak kompatybilności wstecznej jest powodem pewnych istotnych zmian.
Tatarize
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.