鱼C论坛

 找回密码
 立即注册
查看: 1089|回复: 6

[已解决]python迭代器问题求助

[复制链接]
发表于 2020-3-22 22:32:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在小甲鱼视频中说的
class Fib(object):
    def __init__(self):
        self.a, self.b = 0, 1

    def __iter__(self):
        return self

这个魔法方法__iter__没有看懂,为什么返回的是self,而不是iter(self)呢。
最佳答案
2020-3-26 08:02:15
18508410033 发表于 2020-3-25 21:29
是类中定义了__iter__ 和 __next__他的实例对象就是迭代器吗

是的,只要定义了 __next__ 的方法就是迭代器,就有必要重写 __iter__ 方法,返回 self
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-23 10:22:36 | 显示全部楼层
iter(self)会调用self.__iter__(),这样就死循环了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-23 13:06:28 | 显示全部楼层
__iter__() 方法返回迭代器,当调用 iter(self) 就会调用 self.__iter__(),会形成死循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-23 21:07:47 | 显示全部楼层
zltzlt 发表于 2020-3-23 13:06
__iter__() 方法返回迭代器,当调用 iter(self) 就会调用 self.__iter__(),会形成死循环

但是这个方法在类中重写了,结果只是放回实例对象本身。这里很不理解这个,为什么是会返回迭代器呢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-24 08:05:09 | 显示全部楼层
18508410033 发表于 2020-3-23 21:07
但是这个方法在类中重写了,结果只是放回实例对象本身。这里很不理解这个,为什么是会返回迭代器呢。

因为 self 就是迭代器啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-25 21:29:20 | 显示全部楼层
zltzlt 发表于 2020-3-24 08:05
因为 self 就是迭代器啊

是类中定义了__iter__ 和 __next__他的实例对象就是迭代器吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-26 08:02:15 | 显示全部楼层    本楼为最佳答案   
18508410033 发表于 2020-3-25 21:29
是类中定义了__iter__ 和 __next__他的实例对象就是迭代器吗

是的,只要定义了 __next__ 的方法就是迭代器,就有必要重写 __iter__ 方法,返回 self
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 11:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表