【发布时间】:2012-02-20 01:38:41
【问题描述】:
我怎样才能摆脱 fib_gen2 中的全局变量?我不想根据 gist 使用本机生成器或类,这是一项学术练习,尽管我对任何实现的改进感兴趣。
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)
【问题讨论】:
-
“我不想使用原生生成器……”如果你在做这种事情,大概是因为对函数式编程感兴趣;在这种情况下,您应该意识到使用生成器可以避免在生成器实例之间共享状态。