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

113

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

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

Bodacydo
источник

Ответы:

154

Да или next(gen)в 2.6+.

Игнасио Васкес-Абрамс
источник
3
Я знаю, это неловко, почему это не работает? W1 = params.next()но получаю ошибкуAttributeError: 'generator' object has no attribute 'next'
Чарли Паркер
stackoverflow.com/questions/1073396/…
Игнасио Васкес-Абрамс
2
@CharlieParker Вы должны использовать Python 3!
Акшай Локур
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
dshri
источник
2

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

Рюкендо Дей
источник
1

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

Niki.py
источник
1
Это не так уж и странно. Python 3 должен ломать вещи и допускать только более четкий и лучший код. Отсутствие обратной совместимости является причиной некоторых критических изменений.
Tatarize