Come ottenere un valore alla volta da una funzione generatore in Python?


113

Domanda molto semplice: come ottenere un valore da un generatore in Python?

Finora ho scoperto di poterlo ottenere scrivendo gen.next(). Voglio solo assicurarmi che questo sia il modo giusto?

Risposte:



66

In Python <= 2.5, usa gen.next(). Funzionerà per tutte le versioni di Python 2.x, ma non per Python 3.x

In Python> = 2.6, usa next(gen). Questa è una funzione incorporata ed è più chiara. Funzionerà anche in Python 3.

Entrambi finiscono per chiamare una funzione dal nome speciale next(), che può essere sovrascritta dalla sottoclasse. In Python 3, tuttavia, questa funzione è stata rinominata in __next__(), per essere coerente con altre funzioni speciali.


16

Usa (per python 3)

next(generator)

Ecco un esempio

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

dovrebbe stampare

0
1


2

Per ottenere il valore associato a un oggetto generatore in python 3 e versioni successive, utilizzare next(<your generator object>). le chiamate successive a next () producono i valori degli oggetti successivi nella coda.


1

In python 3 non hai gen.next(), ma puoi ancora usare next(gen). Un po 'bizzarro se me lo chiedi, ma è così.


1
Non è così strano. Python 3 dovrebbe rompere le cose e consentire solo un codice migliore più chiaro. Non avere la retrocompatibilità è il punto di alcune modifiche sostanziali.
Tatarize
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.