Як отримати одне значення за раз від функції генератора в Python?


113

Дуже основне питання - як отримати одне значення від генератора в Python?

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

Відповіді:


154

Так, або next(gen)в 2.6+.


3
Я знаю, що це бентежить, чому це не працює? W1 = params.next()але отримайте помилкуAttributeError: 'generator' object has no attribute 'next'
Чарлі Паркер


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


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.