how can i get rid of the globals in fib_gen2? I don't want to use native generators or classes per this gist, this is an academic exercise, though I am interested improvements in any of the implementations.
def ftake(fnext, last):
return [fnext() for _ in xrange(last)]
def fib_gen2():
global a; a = 1
global b; b = 1
def next():
global a; global b;
r = a
a, b = b, a + b
return r
return next
assert [1,1,2,3,5] == ftake(fib_gen2(), 5)