Python中为啥我的可循环对象只循环一次,循环第二次就没了没了没了,解决解决

为什么我会总结这篇文章,可能新手都会遇到的一个问题

当然我也是新手,所以这是我遇到的问题吧

 
 

首先先描述一下我遇到的这个问题

有一天夜黑风高,我像往常一样蹲着路边(嘻嘻嘻),突然有个女孩急匆匆跑过来

拉着我的手问:“为什么为什么我的迭代循环只循环一次,第二次,第三次,第四次...就没有东西了,我的迭代啊.....”

我一看,就这,哼,我伸出那熟练的单手一把把她撸进怀里,错误错误,是搂是搂进怀里,结果我的被单湿透了,

一看全身都是汗啊.....

 
废话少说,开练开练
 
首先我们要弄清楚,这个可迭代的东西(也就是循环的这个东西),它这个到底是迭代器呢还是可迭代对象呢
先简单概括一下:迭代器呢,一次for循环就没有了,而可迭代对象呢,任你for一万次都会输出
【这里的for指for i in 可迭代的东西】
差不多你可能就会明白了,别着急我们再往里深入深入
 
迭代器(Iterator)和可迭代对象(Iterable)的区别和联系
 
迭代器(Iterator):它的特点就是不知道要执行多少次,所以可以理解不知道有多少个元素,每调用一次__next__()方法,就会往下走一步,当然是用__next__()方法只能往下走,不会回退,遵循迭代器协议。
迭代器协议:含__iter__()方法,且方法返回的Iterator对象本身;含__next__()方法,每当__next__()方法被调用,返回下一个值,直到没有值可以访问,这个时候会抛出stopinteration的异常。
 
可迭代对象(Iterable):它的特点其实就是序列的大小长度已经确定了(list,tuple,dict,string等),遵循可迭代协议。
可迭代协议:含__iter__()方法。且可迭代对象中的__iter__()方法返回的是一个对应的迭代器。(如list对应的迭代器就是list_iterator)
 
通俗地讲就是类如果满足可迭代协议也就是有__iter__()的时候就可以成为可迭代对象,如果类有__iter__()和__next__()方法就可以称之为迭代器
 
或者更简单的说:
一个可迭代对象,不含__next__()方法,每次遍历都是将迭代对象转化为迭代器,遍历多少次就转化多少次。
而如果是迭代器呢,此时的遍历就是不断调用__next__()的过程,而这个过程是单向的,到最后一个元素时会抛出StopIteration异常终止此次遍历,迭代器用完了就没有了
 
 
到此你应该可以可能理解了吧哈哈哈哈
------------------------------------------------------------------------------
如果还有帅哥美女不理解迭代器是什么的话,请接着往下看
 
 
迭代就是循环
迭代器就是存放迭代的地方
序列和字典都可以迭代(不过是可迭代对象)
iter()  表示生成一个迭代器(记得迭代器是一次性的,如果尝试多次性可能有危险哦),可以把序列,字典啊...等弄成迭代器
next() 表示每完成一次循环输出的值
 
>> string = 'BCDEFG'
>>> c = iter(string)
>>> next(c)
'B'
>>> next(c)
'C'
>>> next(c)
'D'
>>> next(c)
'E'
>>> next(c)
'F'
>>> next(c)
'G'
>>> next(c)    ##如果循环到最后,没有值了,则抛出一个StopIteration报错
Traceback (most recent call last):
  File "<pyshell#82>", line 1, in <module>
    next(c)
StopIteration

到这里就接近尾声了....如果对各位靓仔靓妹有帮助的话记得给我个赞噢(啥都不要,就想集赞)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值