Method returning an Iterable Object

Andreas Waldenburger geekmail at
Mon Jan 26 18:01:52 CET 2009

On Mon, 26 Jan 2009 22:01:21 +0530 Anjanesh Lekshminarayanan
<mail at> wrote:

> Is there a way to return an iterable object ?
> class twoTimes:
>     def __init__(self, n):
>         self.__n = n
>     def getNext():
>         self.__n *= 2
>         return self.__n
Rename getNext() to next() and create another method named __iter__()
that just returns self. TwoTimes is now an iterator.

You can also replace the whole class with a function thusly:

    def two_times(n):
        for k in itertools.count(1):
            yield n * (2**k)

This function is then called a generator (because it generates an
iterator). You can now say

    infinitely_doubling_numbers = two_times(2)
    for number in in infinitely_doubling_numbers:
        print number

to the same effect as the iterator version above. seems uncooperative at the moment, but look up iterators or
the iterator protocol and generators if it works for you.

> t = twoTimes(5)
> while (n in t.getNext()): # while (n in t):
>     print (n)
You are aware that this is an infinite loop, as is my example above BTW?
(Probably just an example, but I ask just in case.)

Also, could it be that you mean "for n in t"?


My real email address is constructed by swapping the domain with the
recipient (local part).

More information about the Python-list mailing list