今天看InfoQ上的一篇关于Fn.py的文章,Fn中的Stream可以实现无限序列,例如文章中的代码:
f = Stream() fib = f << [0, 1] << map(lambda x, y: x + y, f, drop(1, f))
这是实现了一个无限的斐波那契数列,我根据这个实现了一个等比级数,等比级数的公式是f = b^(n-1), b是基数,n=1 f=1, n>=2 f=b^(n-1)。
我实现的方法使用了生成器:
def geo_sequence(b): n = 2 while 1: yield b ** (n - 1) n += 1如上面代码,这是一个无限循环的生成器,每次调用next的时候都会得到下一个等比级数
gs = geo_sequence(3) print gs.next() # output 3 print gs.next() # output 9 print gs.next() # output 27 print gs.next() # output 81如何使用Stream实现无限序列呢?很简单,如下:
f = Stream() f << geo_sequence(3) print f[3] print list(f[:5]) print list(f[3:5]) print list(f[5:10])output:
81
[3, 9, 27, 81, 243]
[81, 243]
[729, 2187, 6561, 19683, 59049]
就这样!
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于