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?

bodacydo
źródło

Odpowiedzi:

154

Tak lub next(gen)w wersji 2.6+.

Ignacio Vazquez-Abrams
źródło
3
Wiem, że to zawstydzające, dlaczego to nie działa? W1 = params.next()ale pojawia się błądAttributeError: 'generator' object has no attribute 'next'
Charlie Parker
2
@CharlieParker Musisz używać Pythona 3!
Akshay Lokur
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.

Christian Oudard
źródło
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
dshri
źródło
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.

Ryukendo Dey
źródło
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.

Niki.py
źródło
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