次のようなジェネレータ関数があります。
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.next
Python 3から削除されました(ペップ3114) - 使用next
関数その代わり:
In [7]: next(gen)
Out[7]: 1