On Thu, 02 Apr 2009 23:14:49 +0100, grocery_stocker <cdal...@gmail.com>
wrote:
Give the following code..
class it:
... def __init__(self):
... self.count = -1
... def next(self):
... self.count +=1
... if self.count < 4:
... return self.count
... else:
... raise StopIteration
...
def some_func():
... return it()
...
iterator = some_func()
iterator
<__main__.it instance at 0xb7f482ac>
some_func
<function some_func at 0xb7f45e64>
some_func()
<__main__.it instance at 0xb7f4862c>
How come when I call some_func().next(), the counter doesn't get
incremented?
some_func().next()
0
some_func().next()
0
some_func().next()
0
Here, you are creating an instance of the class "it", incrementing
and returning that instance's counter, then throwing the instance away.
But when I call iterator.next(), it does.
iterator.next()
0
iterator.next()
1
iterator.next()
2
iterator.next()
3
Here you already have a single instance, and you don't throw it away
after incrementing its counter.
--
Rhodri James *-* Wildebeeste Herder to the Masses
--
http://mail.python.org/mailman/listinfo/python-list