Как получить по одному значению из функции генератора в Python?


113

Очень простой вопрос - как получить одно значение из генератора в Python?

Пока я обнаружил, что могу получить его, написав gen.next(). Я просто хочу убедиться, что это правильный путь?

Ответы:



66

В Python <= 2.5 используйте gen.next(). Это будет работать для всех версий Python 2.x, но не для Python 3.x

В Python> = 2.6 используйте next(gen). Это встроенная функция, и она более понятна. Это также будет работать в Python 3.

Оба они в конечном итоге вызывают функцию со специальным именем next(), которую можно переопределить путем создания подклассов. Однако в Python 3 эта функция была переименована в __next__(), чтобы соответствовать другим специальным функциям.


16

Использование (для Python 3)

next(generator)

Вот пример

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

следует распечатать

0
1


2

Чтобы получить значение, связанное с объектом генератора в Python 3 и выше, используйте next(<your generator object>). последующие вызовы next () производят последовательные значения объекта в очереди.


1

В python 3 у вас его нет gen.next(), но вы все равно можете использовать next(gen). Если вы спросите меня, это немного странно, но так оно и есть.


1
Это не так уж и странно. Python 3 должен ломать вещи и допускать только более четкий и лучший код. Отсутствие обратной совместимости является причиной некоторых критических изменений.
Tatarize
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.