Generators and iterators

Bertrand Geston bergeston at yahoo.fr
Tue Mar 5 10:06:01 EST 2002


Hello,

I just quickly red the page about new features in Python 2.2 and tried - for
fun - to test it. It must be obvious but I really don't see why, in the
console transcript below, z.next() send back None and not 1,2 and 3
whereas it does it correctly 3 times, no more no less.

TIA.

B.

Sorry for the methods and class names. Here is it:

PythonWin 2.2 (#28, Dec 21 2001, 12:21:22) [MSC 32 bit (Intel)] on win32.
Portions Copyright 1994-2001 Mark Hammond (mhammond at skippinet.com.au) - see
'Help/About PythonWin' for further copyright information.
>>> from __future__ import generators
>>> def t():
...  yield 1
...  yield 2
...  yield 3
...
>>> tt = t()
>>> tt
<generator object at 0x010958F8>
>>> tt.next()
1
>>> tt.next()
2
>>> tt.next()
3
>>> tt.next()
Traceback (most recent call last):
  File "<interactive input>", line 1, in ?
StopIteration
>>> class Z:
...  def __init__(self):
...   self.ttt=t()
...  def __iter__(self):
...   return self
...  def next(self):
...   self.ttt.next()
...
>>> z=Z()
>>> for i in z:
...  print i
...
None
None
None
>>> z=Z()
>>> z.next()
>>> z.next()
>>> z.next()
>>> z.next()
Traceback (most recent call last):
  File "<interactive input>", line 1, in ?
  File "<interactive input>", line 7, in next
StopIteration



More information about the Python-list mailing list