https://blog.csdn.net/xxlovesht/article/details/106539899

1、迭代器

  • 含有next()函数的对象都是一个迭代器
  • for … in… 这个语句其实做了两件事。第一件事是获得一个可迭代器,即调用了iter()函数。第二件事是循环的过程,循环调用next()函数。
  • 对于test这个类来说,它定义了iternext函数,所以是一个可迭代的类,也可以说是一个可迭代的对象(Python中一切皆对象) ```python class test(): def init(self,data=1):

    1. self.data = data

    def iter(self): # 获取迭代器

    1. return self

    def next(self):

    1. if self.data > 5:
    2. raise StopIteration
    3. else:
    4. self.data+=1
    5. return self.data

for item in test(3): print(item)

  1. <a name="oRiKX"></a>
  2. ### 2、生成器
  3. - 生成器是一种特殊的迭代器。当调用fib()函数时,生成器实例化并返回,这时并不会执行任何代码,生成器处于空闲状态,注意这里prev, curr = 0, 1并未执行。然后这个生成器被包含在list()中,list会根据传进来的参数生成一个列表,所以它对fib()对象(一切皆对象,函数也是对象)调用__next()__方法
  4. ```python
  5. def fib(end = 1000):
  6. prev,curr=0,1
  7. while curr < end:
  8. yield curr
  9. prev,curr=curr,curr+prev
  10. print(list(fib()))