一、迭代器
迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代 器只能往前不会后退。
迭代器有两个基本的方法:iter() 和 next()。
iter(iterable)从可迭代对象中返回一个迭代器,iterable必须是能提供 一个迭代器的对象
next(iterator) 从迭代器iterator中获取下一了记录,如果无法获取下 一条记录,则触发stoptrerator异常
注意:
1.迭代器只能往前取值,不会后退
2.用iter函数可以返回一个可迭代对象的迭代器
a=[1,2,3,4,5]
b=iter(a)
print(type(b))
print(next(b))
print(next(b))
print(next(b))
for i in a:
print(i)
二 、生成器
如果一个函数中包含yield关键字,那么这个函数就不再是一个普通函数,而是 一个生成器
生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是 一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运 行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。 调用一个生成器函数,返回的是一个迭代器对象。
生成器的作用:
列表所有数据都在内存中,如果有海量数据的话将会非常耗内存。
如:仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费 了。
如果列表元素按照某种算法推算出来,那我们就可以在循环的过程中不断推算出 后续的元素,这样就不必创建完整的list,从而节省大量的空间。
简单一句话:我又想要得到庞大的数据,又想让它占用空间少,那就用生成器!
生成器的工作原理:
(1)生成器(generator)能够迭代的关键是它有一个next()方法, 工作原理就是通过重复调用next()方法,直到捕获一个异常。
(2)可用next()调用生成器对象来取值。next 两种方式 t.next() 或者 next(t)。
(3)yield相当于 return 返回一个值,并且记住这个返回的位置,下次迭代时, 代码从yield的下一条语句开始执行
def fbnq(n):
a,b=0,1
i=0
while i<n:
a,b=b,a+b
yield a
i+=1
f=fbnq(10)
for x in f:
print(x)
来源:CSDN
作者:thc151297
链接:https://blog.csdn.net/thc151297/article/details/103689135