迭代器 生成器 python,迭代器和生成器的区别 python
迭代器简介
迭代器是重复值的工具。迭代是一种重复反馈过程的活动,其目的通常是为了接近期望的目标或结果。每次迭代过程称为“迭代”,每次迭代的结果就是下一次迭代的初始值。简单迭代不是迭代。
迭代器是一个迭代值的工具。迭代是一个迭代的过程,每次都在重复。
根据上一个结果,单纯的复读不是复读。
whileTrue:
Msg=输入(:)。strip (print) msg)。
接下来的while循环是迭代过程,不仅满足迭代,而且将每次再次代入的索引值作为下一次循环的新索引值,重复进行,最后取列表中的所有值。
goods=[mac ,联想,宏碁,戴尔,索尼]
Index=0while index
指数=1
迭代器是一种迭代检索值的工具,与循环中检索多个值的类型有关。
是:开放列表、字符串、元组、字典、集合和文件。
l=[egon ,刘, dldcc]
i=而我
i=1
上述重复值的方法仅适用于列表、字符串和元组的索引数据类型。
为了解决基于索引迭代器的值检索的局限性
Python必须提供独立于索引的访问方法。这是迭代器。
1.1可重复对象
通过索引进行迭代值选择实现起来很简单,但它只适用于字符串、列表和元组序列类型。对于非数组类型(比如没有索引的字典或集合),必须找到一个独立于索引的方法来获取迭代值。这用于迭代器。
我们必须事先理解可重复对象的重要概念。从语法上讲,所有包含__iter__方法的对象都是可重复的,而字符串、列表、元组、字典、集合和打开的文件都是可重复的。
{ name : egon }。_ ITER _ { 7,8,9 }。_ ITER _。
#1.可重复对象:然而,具有内置__iter__方法的对象被称为可重复对象# S1= # # S1。_ ITER _ () #
#l=[]## l.__iter__ () #
#t=(1,)
#d={a:1}## d.__iter__
#集合1={ 1,2,3 } # #集合1。_ _ ITER _ # #
#withopen(a.txt),mode= w))as f:# # f . _ _ ITER _ _)# pass
1.2迭代器范围
调用obj.iter)方法返回的结果就是迭代器对象(iterator)。迭代器对象包括iterator和next方法,打开的文件本身就是迭代器对象。运行迭代器的。iter()方法将检索迭代器本身,同时运行迭代器的。next)方法将计算它的下一个值。迭代器以迭代的方式取值,与Python提供的统一索引无关。只要它的值中有多个“值”,不管是串行的还是非串行的,就跟迭代器一样。
S={1,2,3} #可重复对象s
I=ITER(s)本质上是一个迭代器对象I调用s.__iter__)并返回s
next(I) #的本质是调用i.__next__()
一个
下一步(一)2
下一步(一)3
Next(I) #抛出StopIteration的异常,表示它是琐碎的,重复结束。
#2,调用repeatable对象下的__iter__方法,将其转换为iterator对象。
d={a:1, b:2, c:3}
d _ iterator=d . _ _ ITER _ _()# print(d _ iterator)
#print(d_iterator。__next_ ()) print) d_iterator。_ _ next _))print)print)d _ iterator。_)
# while true:# try:# print(d _ iterator。_ _ next _ () ) #除了停止迭代:# break #
#print((===))如果迭代器采用干净的值,则marry # d _ iterator=d . _ _ iterator _ _)(# while true:# try 360)prinnt)
# l=[ 1,2,3,4,5 ] # l _ iterator=l._ ITER _ () #
#为真时:#tr
y:#print(l_iterator。_ _ next _ _())# except stop iteration:# break
#3.可迭代对象和迭代器对象详解#3.1可迭代对象(可转换为迭代器的对象):内置_ _ iterator _ _ method对象#迭代对象。_ _ iterator _ _():获取迭代器对象。
#3.2迭代器对象:具有__next__ method和_ _ iterator _ _ method #迭代器对象的对象。__next__():获取iterator # iterator对象的下一个值。_ _ iterator _ _():获取迭代器本身,和调不调一样。
#dic_iterator=dic。__iter__()#print(dic_iterator就是dic_iterator。__iter__()。__iter__()。__iter__())#
#4、迭代对象:字符串、列表、元组、字典、集合、文件对象#迭代器对象:文件对象#s1=#s1。__iter__()#
#l=[]#l.__iter__()#
#t=(1,)#t.__iter__()#
#
#d={a:1}#d.__iter__()#
#set1={1,2,3}#set1。__iter__()#
#
#with open(a.txt ,mode= w )as f:# f . _ _ ITER _ _()# f . _ _ next _ _()
双循环原理
使用迭代器,我们可以独立于索引迭代值。while循环实现如下。
goods=[mac ,联想,宏碁,戴尔,索尼]
I=iterator (goods) #每次都需要重新获取一个迭代器对象。
while true:try:print(next(I))except stop iteration:# catch exception终止循环。
破裂
For循环也叫迭代循环,in后面可以跟任何iterable对象。上面的while循环可以缩写为
goods=[mac , lenovo , acer , dell , Sony ]for item in goods:print(item)
for循环在工作时,会先调用iterator对象goods内置的iter方法得到一个iterator对象,然后调用iterator对象的next方法将得到的值赋给item,并执行循环体完成一次循环,如此反复,直到捕捉到StopIteration异常,迭代结束。
for循环如何工作:for循环可以被称为迭代器循环。
D={a:1, b:2, c:3}#1,d.__iter__()获取一个迭代器对象#2,迭代器对象。__next__()获取一个返回值,然后赋给k#3,重复步骤。
#with open(a.txt ,mode=rt ,encoding= utf-8 )as f:# for line in f:# f . _ _ ITER _ _()# print(line)
#list(hello) #原理与for循环相同。
迭代器的优点和缺点
基于索引的迭代值将所有迭代的状态保存在索引中,而基于迭代器的迭代方法不再需要索引,所有迭代的状态都保存在迭代器中。然而,这种方法的优点和缺点并存:
3.1优势:
1.它为顺序和非顺序类型提供了统一的迭代方法。
2.惯性计算:迭代器对象代表一个数据流,需要时只能调用next计算一个值。就迭代器本身而言,同一时间内存中只有一个值,所以可以存储无限个数据流。对于其他容器类型,比如列表,所有元素都需要存储在内存中。由于内存大小的限制,可以存储的值的数量是有限的。
3.2缺点:
1.迭代器的长度除非用尽,否则无法获得。
2.只能取一个值,不能回到起点。更像是‘一次性’的。迭代器产生后,唯一的目标就是重复执行下一个方法,直到值用完为止。否则,你会停留在某个位置,等待下一次对next的调用;如果要再次迭代同一个对象,只能再次调用iter方法创建一个新的iterator对象。如果有两个或更多的循环使用同一个迭代器,只有一个循环会得到值。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。