Pythonのジェネレータとforループ 質問する

Pythonのジェネレータとforループ 質問する

次のようなジェネレータ関数があります。

def generator():
    while True:
        for x in range(3):
            for j in range(5):
                yield x

この関数をロードして「next」を何回か呼び出すと、値が得られると期待します。

0 0 0 0 0 1 1 1 1 1 2 2 2 2 2 0 0 0 0 0 ...

しかし、その代わりに常に 0 が返されます。なぜでしょうか?

>>> execfile("test.py")
>>> generator
<function generator at 0x10b6121b8>
>>> generator().next()
0
>>> generator().next()
0
>>> generator().next()
0
>>> generator().next()
0
>>> generator().next()
0
>>> generator().next()
0
>>> generator().next()
0

ベストアンサー1

generator()新しいジェネレータオブジェクトを初期化します:

In [4]: generator() is generator() # Creating 2 separate objects
Out[4]: False

次に、generator().next()新しく作成されたジェネレータオブジェクトから最初の値を取得します(0あなたの場合はそうです。

一度電話してくださいgenerator:

In [5]: gen = generator() # Storing new generator object, will reuse it

In [6]: [gen.next() for _ in range(6)] # Get first 6 values for demonstration purposes
Out[6]: [0, 0, 0, 0, 0, 1]

注記:generator.nextPython 3から削除されました(ペップ3114) - 使用next関数その代わり:

In [7]: next(gen)
Out[7]: 1

おすすめ記事