Python的迭代器与生成器
迭代器迭代器是一个可以记住遍历位置的对象迭代器对象从第一个元素开始访问直到所有元素被访问完毕迭代器只可以向前访问不可向后退。迭代器的两种基本方法iter()和next()字符串列表元组都可以创建迭代器list1[0,1,2,3,4,5]ititer(list1)print(next(it))# 0print(next(it))# 1迭代器还可以通过循环来进行遍历list1[0,1,2,3,4,5]ititer(list1)forxinit:print(x,end )# 0 1 2 3 4 5也可以使用next()list1[0,1,2,3,4,5]ititer(list1)whileTrue:try:print(next(it),end)# 012345exceptStopIteration:breakStopIterationStopIteration异常用于标识迭代的完成防止出现无限循环的情况在next()方法中我们可以设置在完成指定循环次数后触发StopIteration异常来结束迭代生成器在 Python 中使用了yield的函数被称为生成器yield是一个关键字用于定义生成器函数生成器函数是一种特殊的函数可以在迭代过程中逐步产生值而不是一次性返回所有结果defcountdown(n):whilen0:yieldn nn-1genercountdown(5)print(next(gener))# 5print(next(gener))# 4print(next(gener))# 3forxingener:print(x,end )# 2 1countdown函数是一个生成器函数。它使用 yield 语句逐步产生从 n 到 1 的倒数数字。在每次调用 yield 语句时函数会返回当前的倒数值并在下一次调用时从上次暂停的地方继续执行生成器函数的优势是它们可以按需生成值避免一次性生成大量数据并占用大量内存。斐波那契数列斐波那契数列是一个数字序列其中每个数字是前两个数字的总和通常以0和1作为起始值。具体定义为F(1) 0F(2) 1且对于n ≥ 3有F(n) F(n-1) F(n-2)。这个数列的前几项为0、1、1、2、3、5、8、13、21、34等deffibonacci(n):a,b,counter0,1,0whileTrue:ifcountern:returnyielda a,bb,ab counter1ffibonacci(10)whileTrue:try:print(next(f),end )# 0 1 1 2 3 5 8 13 21 34 55exceptStopIteration:break简单讲解一下第1次调用next(f) →yielda(输出0)→ 暂停(后面的 a,b...还没执行)第2次调用next(f) → 从暂停处继续 a,bb,ab(a变成1,b变成1)→ counter1→ 回到while开头 →yielda(输出1)→ 暂停 第3次调用next(f) → 从暂停处继续 a,bb,ab(a变成1,b变成2)→ counter1→ 回到while开头 →yielda(输出1)→ 暂停yield和return最大的不同就是return是直接返回所有yield是返回逐步返回。