Python如何对生成器对象进行切片操作

2017-08-09  本文已影响0人  我有一只碗

斐波那契数列大家都已经很熟悉了

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

在这里定义了一个斐波那契数列的类,可以对它进行迭代

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

符合预期目标

上一篇下一篇

猜你喜欢

热点阅读