Iteratoration question

Rhodri James rhodri at wildebst.demon.co.uk
Fri Apr 3 00:33:16 CEST 2009


On Thu, 02 Apr 2009 23:14:49 +0100, grocery_stocker <cdalten at 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



More information about the Python-list mailing list