首页 新闻 会员 周边 捐助

迭代器都是在__iter__里面return self吗在

0
[已关闭问题] 关闭于 2025-09-10 05:48

对,如果只是问「迭代器」本身,那答案是:是的,必须 return self。
Python 的数据模型文档里写得非常明确:
iterator.__iter__()
Return the iterator object itself.
所以只要一个类想充当「迭代器」,它的 __iter__ 方法就该简单地

def __iter__(self):
        return self


这是协议的一部分,不遵守就不再是规范的迭代器

_java_python的主页 _java_python | 小虾三级 | 园豆:984
提问于:2025-09-10 05:47
< >
分享
所有回答(1)
0

在 Python 里「迭代器」≠「可迭代对象」:
1. 可迭代对象(Iterable)
必须实现 __iter__,而且只能返回一个新的或复用的迭代器。
它通常不返回 self,因为可迭代对象本身不一定是迭代器。
2. 迭代器(Iterator)
必须实现 __iter__ 和 __next__。
它的 __iter__ 才规定为 return self——这是为了让 iter(iterator) 仍然拿到自身,从而能继续被 for 循环等场合反复使用。

# 1. 可迭代对象(不是迭代器)
class Range7:
    def __init__(self, n):
        self.n = n
    def __iter__(self):
        # 返回一个全新的迭代器实例,绝不返回 self
        return Range7Iterator(self.n)

# 2. 真正的迭代器
class Range7Iterator:
    def __init__(self, n):
        self.n = n
        self.i = 0
    def __iter__(self):      # 这里才必须 return self
        return self
    def __next__(self):
        if self.i >= self.n:
            raise StopIteration
        v = self.i
        self.i += 1
        return v
_java_python | 园豆:984 (小虾三级) | 2025-09-10 05:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册