迭代器的疑问

迭代器的疑问

http://img1.sycdn.imooc.com//climg/5eb4fe0409d71efc03620381.jpg

一、"__iter__返回一个可迭代对象的实例",这句话没懂,他到底返回了什么东西,太抽象了我问都不知道怎么问。就这道题而言,这个东西是个数组吗?还是列表?是单元素?还是多元素集合?他就一句value=0,__iter__能返回什么?我本来的理解是:__iter__生成一个类似数组的东西,__next__逐一取值。可现在“+=1”是写在__next__里,我就完全一头懵逼了。就这个例子而言,看起来是__iter__只有一个数值,__next__把这个值每次加一再输出,那为什么还能用针对多元素集合的for呢?数值存放原理没有搞懂。

二、不需要__iter__写在前,__next__写在后吗?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好:

  1. __iter__()返回可迭代对象的迭代器,比如该题中PowNumber(),因为它同时实现了__iter__()和__next__()所以是个迭代器,迭代器的迭代器是它本身,因此return self。而self代表的是当前实例对象,因此"__iter__返回一个可迭代对象的实例"。完成取下一个值的操作是由__next__()完成的,而__next__()是只有迭代器才有的,可迭代对象是没有的,所以需要通过可迭代对象的__iter__()返回这个可迭代对象的迭代器,然后会调用该迭代器的__next__(),完成取下一个元素的操作。

  2. __iter__()和__next__()的顺序没有关系,它们之间并没有依赖关系,哪个在前面都可以的。

如果解决了你的疑惑,请采纳,祝学习愉快~


  • 江民川 提问者 #1
    老师,我的意思是,这个例子里只有一个value=0,用__iter__()返回它的迭代器,可为什么+=1是在__next__()里,凭我的理解,既然是iter返回迭代器,next取值,感觉应该在__iter__()里把规则写好。
    2020-05-08 16:30:55
  • 江民川 提问者 #2
    按上个回复里说的那样错误理解,我就感觉是哪里理解错了……
    2020-05-08 16:32:37
  • 好帮手慕觉浅 回复 提问者 江民川 #3
    同学你好:因为__next__()才是用来取下一个值的方法,所以value += 1当然是写在__next__()里的。__iter__()只是用来获取迭代器对象。
    2020-05-08 17:28:09
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师