【2017-09-20】迭代器与生成器(一)

2017-09-20  本文已影响0人  小蜗牛的成长

迭代器(iterator)与生成器(generator)

#简单示例
>>> list1=[1,2,3,4]
>>> list_iterator=iter(list1)
>>> list1
[1, 2, 3, 4]
>>> list_iterator
<list_iterator object at 0x0227B7F0>
>>> next(list_iterator)
1
>>> next(list_iterator)
2
>>> next(list_iterator)
3
>>> next(list_iterator)
4
>>> next(list_iterator)
Traceback (most recent call last):
  File "<pyshell#13>", line 1, in <module>
    next(list_iterator)
StopIteration
>>> 

示例2:自定义迭代器:实现斐波那契数列
在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)

>>> from itertools import islice
>>> class Fibonacci:
    def __init__(self):
        self.f0=0
        self.f1=1
    def __iter__(self):
        return self
    def __next__(self):
        value=self.f1
        self.f1+=self.f0
        self.f0=value
        return value

    
>>> f = Fibonacci()
>>> list(islice(f, 0, 10))
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
>>> 

示例3:用生成器的方式实现斐波那契数列

>>> def Fibonacci():
    f0,f1=0,1
    while True:
        yield f1
        f0,f1=f1,f0+f1
>>> f = Fibonacci()
>>> list(islice(f, 0, 10))
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
>>> 

  迭代器不会预先将所有元素加载在内存中,只有当它被调用时,才会真正返回值

上一篇 下一篇

猜你喜欢

热点阅读