Method returning an Iterable Object
geekmail at usenot.de
Mon Jan 26 18:01:52 CET 2009
On Mon, 26 Jan 2009 22:01:21 +0530 Anjanesh Lekshminarayanan
<mail at anjanesh.net> 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:
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:
to the same effect as the iterator version above.
python.org 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