https://blog.csdn.net/xxlovesht/article/details/106539899
1、迭代器
- 含有next()函数的对象都是一个迭代器
- for … in… 这个语句其实做了两件事。第一件事是获得一个可迭代器,即调用了iter()函数。第二件事是循环的过程,循环调用next()函数。
对于test这个类来说,它定义了iter和next函数,所以是一个可迭代的类,也可以说是一个可迭代的对象(Python中一切皆对象) ```python class test(): def init(self,data=1):
self.data = data
def iter(self): # 获取迭代器
return self
def next(self):
if self.data > 5:raise StopIterationelse:self.data+=1return self.data
for item in test(3): print(item)
<a name="oRiKX"></a>### 2、生成器- 生成器是一种特殊的迭代器。当调用fib()函数时,生成器实例化并返回,这时并不会执行任何代码,生成器处于空闲状态,注意这里prev, curr = 0, 1并未执行。然后这个生成器被包含在list()中,list会根据传进来的参数生成一个列表,所以它对fib()对象(一切皆对象,函数也是对象)调用__next()__方法```pythondef fib(end = 1000):prev,curr=0,1while curr < end:yield currprev,curr=curr,curr+prevprint(list(fib()))
