In [56]:
import itertools
import sys
class FibonacciSeries(object):
def __iter__(self):
p1 = 1
p2 = 1
yield p1
yield p2
while True:
if p2 > sys.maxint - p1:
return
p3 = p1 + p2
yield p3
p1, p2 = p2, p3
def __contains__(self, n):
for i in self:
if i == n:
return True
if i > n:
return False
def __getitem__(self, item):
if isinstance(item, slice):
print 'slicing fib'
return list(itertools.islice(self, item.start, item.stop, item.step))
else:
print 'indexing fib'
return itertools.islice(self, item, item+1).next()
In [58]:
f = FibonacciSeries()
In [47]:
l = list(f)
l[10]
Out[47]:
In [60]:
from itertools import islice
f[10]
Out[60]: