Iteraror and Generator
#! ruby def fibUpTo(max) a,b = 1,1 while a <= max yield a a,b = a+b, a end end fibUpTo(1000) do |n| puts n end
#! python from __future__ import generators def fibGenerator(num): a,b = 1,1 while a<=num : yield a a,b = a+b, a for i in fibGenerator(10000): print i
class Fib: def __init__(self, max_num=0) self.max_num = max_num self.i = 1 self.num = 0 def __iter__ (self): return self def next(self): self.i, self.num = self.i + self.num, self.i val = self.i if val > self.max_num: raise StopIteration else: return val for i in Fib(1000): print i
Python's 'for' (ver 2.2later) is so powerful.
it can iterate any object that implements iterator method.
for i in alist: for k in adict: for k,v in adict: for line in afile: for i in arange: for i in aobj: etc ...