斐波那契數(shù)列大家都已經(jīng)很熟悉了
class Fib():
def __init__(self):
self.a, self.b = 1, 1
def __iter__(self):
while True:
yield self.a
self.a, self.b = self.b, self.a + self.b
在這里定義了一個斐波那契數(shù)列的類淮腾,可以對它進行迭代
n = 0
for x in Fib():
n += 1
print(x)
if n == 30:
break
通過這樣的方式可以很容易輸入前任意個值锭部,但是如果要輸出第20到30個序列的值該怎么辦
如果直接對這個對象或者對這個對象的迭代器進行切片操作會分別得到這兩個錯誤
TypeError: 'Fib' object is not subscriptable
TypeError: 'generator' object is not subscriptable
這時候最容易想到的辦法就是重新寫這個類讓它支持切片操作曼验,但是這樣過于麻煩
這時候itertools模塊下的islice方法顯得十分方便
for x in islice(Fib(), 10, 20):
print(x)
89
144
233
377
610
987
1597
2584
4181
6765
符合預(yù)期目標(biāo)