美文网首页
Python如何对生成器对象进行切片操作

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

作者: 我有一只碗 | 来源:发表于2017-08-09 23:30 被阅读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
    

    符合预期目标

    相关文章

      网友评论

          本文标题:Python如何对生成器对象进行切片操作

          本文链接:https://www.haomeiwen.com/subject/azhcrxtx.html